Java扫描程序输入不允许输入
我试图在Java中向ArrayList添加条目,我让它工作了,但现在不行。这是密码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
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)