You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:13:33