java - 如何将 ArrayList 内的对象实例与通过 Scanner 的用户输入进行比较

标签 java arraylist input collections

我正在尝试自己学习数组列表的用法,但遇到了困境:

我有3个类,一个父亲抽象类有2个 child ,这些类的实例存储在主程序的数组列表中,我的目标基本上是“提高”员工实例(送货员)的工资或商业),通过从控制台检索用户输入并将该输入与我的 arraylist 具有的所有实例的相应属性进行比较,例如:

我想筹集 300 美元或给送货员实例加分

用户输入名称“george”>(我需要搜索其中包含名称 george 的实例)并在该实例上使用 isPlus 和 setPlus 方法。 (所有类对于所有属性和字符串都有相应的 getter 和 setter)。

我不知道如何做或实现,因为我是 arraylist 使用的新手,所以没有我已经尝试过的背景

Class Employee

public abstract class Employee {
   private static final int PLUS = 300;
   private static final int EMPLOYEEQTY = 3;

   protected String name;
   protected int age;
   protected double salary;

   public Employee(String name, int age, double salary) {
      this.name = name;
      this.age = age;
      this.salary = salary;
   }
}

Class Commercial

public class Commercial extends Employee{

   private double comission;

   public Commercial(String name, int age, double salary, double comission) {
      super(name, age, salary);
      this.comission = comission;
   }

   @Override
   public boolean isPlus() {
      if (this.comission > 200 && this.age > 30) {
         return true;
      }else {
         return false;
      }
   }

   @Override
   public double setPlus() {
      if (isPlus() == true) {
         return this.salary+getPlus();
      }
      return salary;
   }
}

Class DeliveryMan

public class DeliveryMan extends Employee{
   private String zone;

   public DeliveryMan(String name, int age, double salary, String zone) {
      super(name, age, salary);
      this.zone = zone;
   }

   @Override
   public boolean isPlus() {
      if (this.zone.equalsIgnoreCase("zona 3") && this.age > 25) {
         return true;
      }
      return false;
   }

   @Override
   public double setPlus() {
      if (isPlus() ==  true) {
         return salary+getPlus();
      }
      return salary;
   }
}

Class Program

public class Program {
   public static void main(String[] args) {

      String name,zone,opt;
      Integer age;
      Double salary,comission;
      ArrayList<Employee> al = new ArrayList<>();
      Scanner sc = new Scanner(System.in);

      for (int i = 0; i < Employee.getEmployeeqty(); i++) {

         System.out.println("Ingrese el nombre del empleado:  ");
         name = sc.next();
         System.out.println("Ingrese la edad del empleado: ");
         age = sc.nextInt();
         System.out.println("Ingrese el salario del empleado: ");
         salary = sc.nextDouble();
         System.out.println("Es el empleado un Repartidor o un Comercial?");
         opt = sc.nextLine();

         switch (opt.toLowerCase()) {
            case "repartidor":
            System.out.println("Ingrese la zona del repartidor: (ej: zona 3)");
            zone = sc.nextLine().toLowerCase();
            al.add(new DeliveryMan(name, age, salary, zone));
            break;
            case "comercial":
            System.out.println("Ingrese la cantidad de la comision del comercial: ");
            comission = sc.nextDouble();
            al.add(new Commercial(name, age, salary, comission));
            break;
            default: System.out.println("Opcion ingresada no es valida, por favor, indique si es un repartidor o un comercial.");
         }
      }
   }
}

最佳答案

迭代数组列表。

借助 equals 方法通过比较名称从 arraylist 中获取对象。

更新对象。 在数组列表中插入更新的对象

ArrayList<Employee> al = new ArrayList<>();

for(int i = 0 ; i < al.size() ; i++){
    if((al.get(i).name).equals(user_input_name)){
          al.salary(i) =  al.salary+increment_salary;
    }

}

关于java - 如何将 ArrayList 内的对象实例与通过 Scanner 的用户输入进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58091127/

相关文章:

Safari 及以后的 Java Applet z-index

java - 是否可以将 ArrayList 除以 double 并创建一个新列表?

java - 从文件读入数组列表,然后将数组列表分成多个字符串,以便我可以单独解析它们

java - 在 ArrayList 中移动元素

java - Jetty 似乎忽略了端口争论

java - 将日历转换为日期 - 忽略时区

html - 填满 1 行上的所有内容

javascript - 设置 readOnly=false IE 后无法更改文本

java - 使用 JDBC 驱动程序在 Android 应用程序和 Oracle DB 之间建立连接

android - Cordova:Android 键盘在切换字段时隐藏