Java 添加到ArrayList然后删除元素的问题

Java 添加到ArrayList然后删除元素的问题,java,arraylist,Java,Arraylist,如果以前有人问过这个问题,我很抱歉,但我真的没有看到任何东西能帮助我回答这个问题。这是为了学校的工作,但为了找出我做错了什么,我已经痛打了自己两天,所以如果有人能帮助我,我将不胜感激 我有一个程序,基本上应该输入两个销售人员的姓名,显示他们的潜在收入表,最后比较他们的销售差异。我在NetBeans IDE中做这件事,我在这里有各种各样的东西试图弄清楚它 在我尝试从ArrayList中提取任何内容之前,一切都正常。我在想,应该可以在那里存储一些东西,然后把它拉回来做我需要做的数学运算,但我一定是做

如果以前有人问过这个问题,我很抱歉,但我真的没有看到任何东西能帮助我回答这个问题。这是为了学校的工作,但为了找出我做错了什么,我已经痛打了自己两天,所以如果有人能帮助我,我将不胜感激

我有一个程序,基本上应该输入两个销售人员的姓名,显示他们的潜在收入表,最后比较他们的销售差异。我在NetBeans IDE中做这件事,我在这里有各种各样的东西试图弄清楚它

在我尝试从ArrayList中提取任何内容之前,一切都正常。我在想,应该可以在那里存储一些东西,然后把它拉回来做我需要做的数学运算,但我一定是做错了什么。以下是我遇到问题的特定类代码:

class EarningDifference {

  SalesPerson persons = new SalesPerson(); //Access to SalesPerson class
  AnnualSales aSaleC = new AnnualSales(); //Access to AnnualSales class
  ArrayList<SalesPerson> list = new ArrayList<>(); //Access to SalesPerson ArrayList
  ArrayList<AnnualSales> aSales = new ArrayList<>(); //Access to AnnualSales ArrayList

  AnnualSales person1EarningStr; //Person one earnings from AnnualSales ArrayList
  AnnualSales person2EarningStr; //Person two earnings from AnnualSales ArrayList
  Double person1Earning; //Person one earnings as double
  Double person2Earning; //Person two earnings as double
  String person1; //String for person one full name
  String person2; //String for person two full name
  Double difference; //Variable to store the difference between Person1 and Person2 sales
  double totalSales; //variable for Total sales

public void people() {
    person1 = list.get(0).getFirstName() + " " + list.get(0).getLastName();
    person2 = list.get(1).getFirstName() + " " + list.get(1).getLastName();
    System.out.println("Comparing " + person1 + " with " + person2 + ".");
}

void settotalSales(Double totalSales) {
    this.totalSales = totalSales;

        AnnualSales person1EarningStr = aSales.get(0);
        AnnualSales person2EarningStr = aSales.get(1);

    double person1Earning = person1EarningStr.doubleValue();
    double person2Earning = person2EarningStr.doubleValue();

    if (aSales.size() < 2) {
        System.out.println("Need another person to compare");
    } else if (person1Earning > person2Earning) {
        difference = person1Earning - person2Earning;
        System.out.println(person1 + " has earned " + difference + " more in sales than " + person2 + ".");
    } else {
        difference = person2Earning - person1Earning;
        System.out.println(person2 + " has earned " + difference + " more in sales than " + person1 + ".");
    }
}
}

以下是将项目添加到AnnualSales ArrayList的类:

public class  SalaryTotal {

        double fixedSalary; //Variable for the fixed salary amount
        double commission; //Variable for the comission
        double minimumSales; //Variable to define the minimum amount of annual sales sales persn must make to receive compensation
        double maximumSales; //Variable to define the number after which commission increases
        double advanceRate; //Variable used to define the rate at which compensation increases after minimum sales are met
        double compensation; //Variable for the amount of compensation based on sales
        double totalSalary; //Variable for the total salary
        double totalSales;
        Double compensationD;

        SalesPerson persons = new SalesPerson();
        ArrayList<SalesPerson> list = new ArrayList<>();
        ArrayList<Double> aSales = new ArrayList<>();

    public void getCompensation(double totalSales) {

            commission = .21; //The constant commission rate
            minimumSales = 120000; //The constant minimum sales needed to receive compensation
            maximumSales = 150000; //The constant maximum amount above which commission increases by the advanceRate
            advanceRate = 1.67; //The constant at which compensation increasea after minimum sales

                this.totalSales = totalSales;

                if (totalSales < minimumSales) {
                    compensation = 0; //sets compensation to 0 if minimum sales are not met  
                } else if (totalSales <= 150000){
                    compensation = totalSales * commission + fixedSalary; //calculates total of compensation if total sales meet minimum sales
                } else if (totalSales > maximumSales) {
                    compensation = totalSales * commission * advanceRate + fixedSalary; //calculates total compensation if total sales exceed maximum sales
                }

                Double compensationD = new Double(compensation);

                aSales.add(compensationD);

                System.out.println("Current total compensation:" + compensation);

                    for (int i = 0; i < aSales.size(); i++) {
                    System.out.println(aSales.get(i));
                    System.out.println("Show " + persons.makePerson1() + ".");
                    }
        }
            }

    }
我敢肯定这是一个完全糟糕的编码混乱,但任何帮助都将是感激的,只要忽略随机位的奇数编码我放在试图缩小我的问题是什么。非常感谢你

程序的其余部分如下所示,我还从前面的部分删除了用于问题测试的部分

主要内容:

可能的赔偿:

public class PossibleCompensation {

   SalesPerson persons = new SalesPerson();
   ArrayList<SalesPerson> list = new ArrayList<>();
   ArrayList<AnnualSales> aSales = new ArrayList<AnnualSales>();

DecimalFormat df = new DecimalFormat("$###,###.00"); //This will correctly format the money amounts

double commission; //Variable for the comission
double minimumSales; //Variable to define the minimum amount of annual sales sales persn must make to receive compensation
double maximumSales; //Variable to define the number after which commission increases
double advanceRate; //Variable used to define the rate at which compensation increases after minimum sales are met
double compensation; //Variable for the amount of compensation based on sales
double totalSales; //Variable for sales person annual sale

public void settotalSales(double totalSales) {

    for (int i = 0; i < list.size(); i++)
        this.totalSales = totalSales; //Sets the input from AnnualCompensation to totalSales in this class

        commission = .21; //The constant commission rate
        minimumSales = 120000; //The constant minimum sales needed to receive compensation
        maximumSales = 150000; //The constant maximum amount above which commission increases by the advanceRate
        advanceRate = 1.67; //The constant at which compensation increasea after minimum sales
        String heading1 = "Total Sales"; //variable to print a header for the table
        String heading2 = "Total Compensation"; //variable to print a header for the table

        System.out.print("\nBelow is a table based on possible commissions if sales increase:\n"); //Prints instructions
        System.out.printf("\n%20s %20s", heading1, heading2); //prints header and formats spacing

        for (double i=totalSales; i <= (totalSales * 1.5); i+= 5000) { //FOR loop for calculating and constructing table
                if (i < minimumSales) {
                    compensation = 0; //sets compensation to 0 if minimum sales are not met  
                } else if (i <= 150000){
                    compensation = i * commission; //calculates total of compensation if total sales meet minimum sales
                } else if (i > maximumSales) {
                    compensation = i * commission * advanceRate; //calculates total compensation if total sales exceed maximum sales
                }

            System.out.printf("\n%20s %15s", df.format(i), df.format(compensation) + "\n"); //Prints out the table
    }
}
}

class SalesPerson {

String firstName;
String lastName;
String totalSalesStr;

ArrayList<SalesPerson> list = new List<>();
销售人员类别:

public SalesPerson() {
    this.firstName = firstName;
    this.lastName = lastName;
    this.totalSalesStr = totalSalesStr;
}

SalesPerson(String firstName, String lastName, String totalSalesStr) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.totalSalesStr = totalSalesStr;
}

public String getFirstName() {
    return this.firstName;
}

public String getLastName() {
    return this.lastName;
}

public String getTotalSalesStr() {
    return this.totalSalesStr;
}

public Double getTotalSales() {
    Double totalSales = Double.parseDouble(totalSalesStr);
    return totalSales;
}

public String makePerson1() {
    String person1 = list.get(0).getFirstName() + " " + list.get(0).getLastName();
    return person1;
}

public String makePerson2() {
    String person2 = list.get(1).getFirstName() + " " + list.get(1).getLastName();
    return person2;
}

@Override
public String toString() {
    return ("Sales person " + this.getFirstName() + " " + this.getLastName() + "  has annual sales of " + this.getTotalSalesStr() + ".");
}

}

class AnnualSales {

Double compensationD;
AnnualSales person1EarningStr;
AnnualSales person2EarningStr;

ArrayList<AnnualSales> aSales = new ArrayList<AnnualSales>();

public AnnualSales() {
    this.compensationD = compensationD;
}

public AnnualSales(Double compensationD) {
    this.compensationD = compensationD;
}

public Double getCompensationD() {
    return this.compensationD;
}

public AnnualSales getperson1EarningStr() {
    person1EarningStr = aSales.get(0);
    return person1EarningStr;
}

public AnnualSales getperson2EarningStr() {
    person2EarningStr = aSales.get(1);
    return person2EarningStr;
}

@Override
public String toString() {
    return ("please show us" + compensationD);
}
}
输入类:

class InputClass {

String firstName;
String lastName;
Double totalSales;
String totalSalesStr;

CopyOnWriteArrayList<SalesPerson> list = new CopyOnWriteArrayList<>();

public void getInputs() {
    for(double i=0; i < 2; i++){

        Scanner persFN = new Scanner(System.in); //Creates scanner input
        System.out.println("Enter sales person's first name:"); //Prints out entry command
        String firstName = persFN.next();

        Scanner persLN = new Scanner(System.in); //Creates scanner input
        System.out.println("Enter sales person's last name:"); //Prints out entry command
        String lastName = persLN.next();

        Scanner input = new Scanner(System.in); //Creates scanner input
        System.out.println("Enter Total Sales:"); //Prints out entry command
        totalSales = input.nextDouble();

        String totalSalesStr = totalSales.toString();

        list.add(new SalesPerson(firstName, lastName, totalSalesStr));

        SalaryTotal calculator = new SalaryTotal(); //Calls class SalaryTotal
        calculator.getCompensation(totalSales);

        PossibleCompensation table = new PossibleCompensation(); //Calls class PossibleCompensation
        table.settotalSales(totalSales);

        EarningDifference earning = new EarningDifference();
        earning.settotalSales(totalSales);
    }
}
}

我认为这应该是所有相关的事情

确保类中有override equals方法。作为一种良好的实践,请始终确保覆盖了equals和hashCode

为什么?

来自Java

从此列表中删除指定元素的第一个匹配项, 如果有。如果列表不包含该元素,则为 不变。更正式地说,删除索引i最低的元素 这样o==null?geti==null:o.equalsgeti如果这样 元素存在。如果此列表包含指定的 元素或等效元素,如果此列表由于 打电话


如果您的ArrayList元素不是Strings,更一般地说,如果它不是内置Java类,则需要重写equals方法。

double totalSalary//总工资的变量…这些注释是不必要的,您选择了一个好的变量名称,它指示了它存储的价值,这些注释会增加混乱您将不得不发布销售人员、年度销售人员和主类,因为从上面的代码中,我们无法从中流出。或者可能会发布一些其他代码,这些代码将复制您遇到的问题。大多数评论都是为了让我的教授感到高兴,但我肯定会记住这一点:您是否在调试模式下运行了代码,并且您是否可以将引发异常的行锁定,它抛出了什么异常?这里添加其他异常的最佳方法是什么?我应该回答我自己的问题并发布更多,还是有其他更喜欢的方法?我可以通过任何方式得到一个例子来说明它的意思吗?遗憾的是,大多数时候读这些解释对我来说听起来像希腊语,我用例子做得更好>。
class InputClass {

String firstName;
String lastName;
Double totalSales;
String totalSalesStr;

CopyOnWriteArrayList<SalesPerson> list = new CopyOnWriteArrayList<>();

public void getInputs() {
    for(double i=0; i < 2; i++){

        Scanner persFN = new Scanner(System.in); //Creates scanner input
        System.out.println("Enter sales person's first name:"); //Prints out entry command
        String firstName = persFN.next();

        Scanner persLN = new Scanner(System.in); //Creates scanner input
        System.out.println("Enter sales person's last name:"); //Prints out entry command
        String lastName = persLN.next();

        Scanner input = new Scanner(System.in); //Creates scanner input
        System.out.println("Enter Total Sales:"); //Prints out entry command
        totalSales = input.nextDouble();

        String totalSalesStr = totalSales.toString();

        list.add(new SalesPerson(firstName, lastName, totalSalesStr));

        SalaryTotal calculator = new SalaryTotal(); //Calls class SalaryTotal
        calculator.getCompensation(totalSales);

        PossibleCompensation table = new PossibleCompensation(); //Calls class PossibleCompensation
        table.settotalSales(totalSales);

        EarningDifference earning = new EarningDifference();
        earning.settotalSales(totalSales);
    }
}
}