Java扫描程序输入不允许输入

Java扫描程序输入不允许输入,java,java.util.scanner,Java,Java.util.scanner,我试图在Java中向ArrayList添加条目,我让它工作了,但现在不行。这是密码 import java.util.*; public class SalesPerson { // define an array of allowable sales person to be three static String[] salesPerson = new String[3]; /** * Calculates the total annual compensation for a

我试图在Java中向ArrayList添加条目,我让它工作了,但现在不行。这是密码

import java.util.*;

public class SalesPerson 
{  
// define an array of allowable sales person to be three
static String[] salesPerson = new String[3]; 

/**
 * Calculates the total annual compensation for a salesperson by 
 * multiplying annual sales by commission rate and then adding the salary
 */
public static void compensation()
{
    try {
        String[] salesperson = new String[3];
        // use scanner class to read input from the user
        Scanner input = new Scanner(System.in);


        // List to add entries to an array list
         ArrayList<String> list = new ArrayList<>();

        // do..while loop to add salespersons 
        do {
            System.out.println("Want to compare additional " //GLD-changed verbiage here
                    + "salespeople? (y/n)"); //GLD-changed verbiage here
            if (input.next().startsWith("y")) {
                System.out.println("Enter the salesperson's name:"); 
                addSalesPerson(list).add(input.next());
                System.out.println("Enter annual amount for salesperson");
                addSalesPerson(list).add(input.next());
            } else {
                break;
            }
        } 
        while (true); 
        // System.out.println(addSalesPerson(list).get(1));
        // check to see if only two sales persons have been entered
        if (addSalesPerson(list).size() < 2 || addSalesPerson(list).size() > 4) {
            throw new Exception("You may only enter two sales persons.");
        }

        Object[] arr;
        arr = addSalesPerson(list).toArray(new String[addSalesPerson(list).size()]);

        // loop through the length of the array
        for (Object arr1 : arr) {
            salesperson = (String[]) arr;
        }

        // for this, we will compare two sales people only
        float sale2 = Float.parseFloat(salesperson[1]);
        float sale4 = Float.parseFloat(salesperson[3]);

        // subtract based on which variable is greater to ensure no negative values
        float difference = sale2 > sale4 ? sale2 - sale4 : sale4 - sale2;
        // print out the difference
        System.out.printf("To match the other sales person's amount " 
                + "you will need to get $%.2f more\n\n", difference);
    } catch (Exception e) {
        // handle any exception by displaying an error message
        System.out.println("Something went wrong while processing your " 
                + "input. Please be sure you only entered numeric values" 
                + " and or the correct amount of salespersons.");
    } 
}

/**
 * Adds sales people to an array list
 * @param salesperson
 * @return ArrayList
 */
static public ArrayList addSalesPerson(ArrayList<String> salesperson)
{ 
    for (int i=0; i<salesPerson.length; i++) {
         if (salesperson.get(i).equals("")) {
             break;
         }

         salesperson.add(salesperson.get(i));
    }

       return salesperson;
    }
} 
它们的输出应该是 想要比较其他销售人员吗?是/否 Y 输入销售人员的姓名:我的姓名 输入销售人员的年度金额:200000 想要比较其他销售人员吗?是/否 Y 输入销售人员的姓名:我的姓名2 输入销售人员的年度金额:100000

要与其他人的金额相匹配,你需要再获得100000美元

但结果是: 想要比较其他销售人员吗?是/否 Y 输入销售人员的姓名: 处理您的输入时出错。请确保您只输入了数值和/或正确的销售人员数量

每次我输入y后,它都会显示销售人员的姓名输入,但同时也会在输入后立即显示异常,而不会输入姓名

任何帮助都将不胜感激

堆栈跟踪如下所示:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at SalesPerson.addSalesPerson(SalesPerson.java:96)
    at SalesPerson.compensation(SalesPerson.java:48)
    at Getters.handleSalesPersonCompensation(Getters.java:61)
    at ComparisonWk5.main(ComparisonWk5.java:31)

谢谢

尝试将e.printStackTrace添加到异常捕获和运行中,这样我们就可以知道问题发生的位置和原因。我认为,通常不建议捕获所有这样的异常。您当然应该发布stacktrace,以便知道出了什么问题。[java.util.ArrayList.rangeCheckArrayList.java:653,java.util.ArrayList.getArrayList.java:429,SalesPerson.addSalesPersonSalesPerson.java:96,SalesPerson.CompensationsSalesperson.java:48,Getters.HandlesSalespersonCompensationGetters.java:61,ComparisonNWK5.java:31]这是堆栈跟踪。嗯,我建议编辑帖子并将其作为代码放入其中。几乎不可能在这里阅读。发布完整的stacktrace!您正在尝试访问空列表的索引0。问题在于整个addSalesPerson方法,例如,因为它与数组salesPerson和列表salesPerson混淆了,这两个变量是不同的,而且它将列表的前3个条目加倍。
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at SalesPerson.addSalesPerson(SalesPerson.java:96)
    at SalesPerson.compensation(SalesPerson.java:48)
    at Getters.handleSalesPersonCompensation(Getters.java:61)
    at ComparisonWk5.main(ComparisonWk5.java:31)