如何实现Person与Payment类交互的Process方法及命令行调用逻辑
嘿,我来帮你搞定这个问题!咱们一步步来拆解需求,先把代码补全再讲清楚命令行交互的部分。
1. 完善Person类
首先我把你给出的不完整的Person类补全,添加构造方法、必要的getter方法(用来检查人员存在性),并完善薪资调整的逻辑:
class Person { private String name; private String surname; private double salary; // 构造方法:初始化姓名与薪资 public Person(String name, String surname, double salary) { this.name = name; this.surname = surname; this.salary = salary; } // Getter方法:外部需要获取姓名来匹配查找 public String getName() { return name; } public String getSurname() { return surname; } public double getSalary() { return salary; } // 完善薪资调整方法:增加负数校验与错误提示 boolean adjustSalary(double money, String type) { if ("+".equals(type)) { salary += money; return true; } else if ("-".equals(type)) { if (salary - money >= 0) { salary -= money; return true; } else { System.out.println("⚠️ 薪资不能低于0,调整失败!"); return false; } } else { System.out.println("⚠️ 无效调整类型,只能输入+或-"); return false; } } // 重写toString:方便打印人员信息,调试/展示更直观 @Override public String toString() { return name + " " + surname + " | 当前薪资: " + salary; } }
2. 实现Payment类与Process方法
Payment类需要维护一个人员列表,Process方法的核心是遍历列表,根据姓名+姓氏(避免重名冲突)检查目标人员是否存在:
import java.util.ArrayList; import java.util.List; class Payment { // 存储所有人员的集合 private List<Person> peopleList = new ArrayList<>(); // 添加人员到系统 public void addPerson(Person person) { peopleList.add(person); } /** * Process方法:检查指定姓名+姓氏的人员是否存在 * @param targetName 目标人员名 * @param targetSurname 目标人员姓 * @return 找到的Person对象,不存在则返回null */ public Person process(String targetName, String targetSurname) { for (Person person : peopleList) { if (person.getName().equals(targetName) && person.getSurname().equals(targetSurname)) { System.out.println("✅ 找到目标人员:" + person); return person; } } System.out.println("❌ 未找到名为 " + targetName + " " + targetSurname + " 的人员"); return null; } // 获取人员列表:方便批量初始化人员 public List<Person> getPeopleList() { return peopleList; } }
3. 实现createPeople方法与命令行交互的Main类
接下来实现批量创建人员的createPeople方法,以及从命令行获取输入的main逻辑,让你可以手动创建人员、调用process方法检查存在性,甚至扩展薪资调整操作:
import java.util.Scanner; public class Main { public static void main(String[] args) { Payment paymentSystem = new Payment(); Scanner scanner = new Scanner(System.in); // 选择人员创建方式 System.out.println("请选择人员创建方式:"); System.out.println("1. 批量初始化预设人员"); System.out.println("2. 手动输入创建人员"); int choice = scanner.nextInt(); scanner.nextLine(); // 吃掉输入后的换行符,避免后续读取异常 if (choice == 1) { createPeople(paymentSystem); } else if (choice == 2) { System.out.println("\n请输入人员信息(格式:姓名 姓氏 薪资,输入exit结束创建):"); while (true) { String input = scanner.nextLine(); if ("exit".equalsIgnoreCase(input)) break; String[] infoParts = input.split(" "); if (infoParts.length != 3) { System.out.println("⚠️ 格式错误,请重新输入!"); continue; } try { String name = infoParts[0]; String surname = infoParts[1]; double salary = Double.parseDouble(infoParts[2]); paymentSystem.addPerson(new Person(name, surname, salary)); System.out.println("✅ 已添加人员:" + name + " " + surname); } catch (NumberFormatException e) { System.out.println("⚠️ 薪资必须是数字,请重新输入!"); } } } else { System.out.println("⚠️ 无效选择,默认批量初始化人员"); createPeople(paymentSystem); } // 调用process方法检查人员存在性 System.out.println("\n请输入要查找的人员姓名与姓氏(用空格分隔):"); String[] targetInfo = scanner.nextLine().split(" "); if (targetInfo.length != 2) { System.out.println("⚠️ 格式错误,必须输入姓名+姓氏!"); } else { Person foundPerson = paymentSystem.process(targetInfo[0], targetInfo[1]); // 扩展:如果找到人员,可选择调整薪资 if (foundPerson != null) { System.out.println("\n是否要调整该人员的薪资?(y/n)"); String adjustChoice = scanner.nextLine(); if ("y".equalsIgnoreCase(adjustChoice)) { System.out.println("请输入调整指令(格式:+ 1000 或 - 500):"); String[] adjustInfo = scanner.nextLine().split(" "); if (adjustInfo.length == 2) { String type = adjustInfo[0]; try { double money = Double.parseDouble(adjustInfo[1]); boolean success = foundPerson.adjustSalary(money, type); if (success) System.out.println("✅ 薪资调整完成:" + foundPerson); } catch (NumberFormatException e) { System.out.println("⚠️ 金额必须是数字!"); } } else { System.out.println("⚠️ 格式错误!"); } } } } scanner.close(); } /** * 批量创建预设人员的方法 */ public static void createPeople(Payment paymentSystem) { paymentSystem.addPerson(new Person("John", "Doe", 5000.0)); paymentSystem.addPerson(new Person("Jane", "Smith", 6500.0)); paymentSystem.addPerson(new Person("Mike", "Johnson", 4800.0)); System.out.println("✅ 已批量初始化3名预设人员!"); } }
4. 命令行运行步骤
打开cmd,进入代码所在的目录,执行以下命令:
- 编译所有类:
javac Main.java Person.java Payment.java - 运行程序:
java Main - 按照控制台提示选择操作即可。
内容的提问来源于stack exchange,提问作者James Smith
相关产品推荐
相关产品推荐

