这是我的第一篇文章,所以对不起,如果我做得不好。 我正在尝试解决USACO这个问题,但是基本上,由于某种原因,我的代码每次都为此特定测试用例抛出错误。
我知道这是很多代码,但这是一个非常简单的问题
代码如下:
public class gift1 {
public static void main(String[] Args) throws IOException {
Scanner sc = new Scanner(new File("gift1.in"));
int peeps = sc.nextInt();
String[][] chart = new String[2][peeps];
sc.nextLine();
for(int i = 0; i < peeps; i++) {
chart[0][i] = sc.nextLine();
chart[1][i] = "0";
}
while(sc.hasNextLine()) {
String giver = sc.next(); //we need to find giver
int indexOfgiver = -1;
for(int i = 0; i < peeps; i++) { //finds indexOfgiver
if(giver.equals(chart[0][i])) {
indexOfgiver = i;
break;
}
}
int moneyTogive = sc.nextInt();
chart[1][indexOfgiver] = Integer.toString(Integer.parseInt(chart[1][indexOfgiver]) - moneyTogive);
int numReceivers = sc.nextInt();
if(numReceivers == 0) {
chart[1][indexOfgiver] = Integer.toString( Integer.parseInt(chart[1][indexOfgiver]) );
}
else {
chart[1][indexOfgiver] = Integer.toString( Integer.parseInt(chart[1][indexOfgiver]) + (int) Math.floor(moneyTogive%numReceivers) );
}
String[] receivers = new String[numReceivers];
for(int i = 0; i < numReceivers; i++) { //list the receivers' names in an array
receivers[i] = sc.next();
}
for(int i = 0; i < numReceivers; i++) { //give money to the receivers
for(int j = 0; j < peeps; j++) {
if(chart[0][j].equals(receivers[i])) {
chart[1][j] = Integer.toString( Integer.parseInt(chart[1][j]) + (int) Math.floor(moneyTogive/numReceivers));
}
}
}
}
PrintWriter fW = new PrintWriter("gift1.out");
for(int i = 0; i < peeps; i++)
System.out.println(chart[0][i] + " " + chart[1][i]);
}
}
该错误发生在第31行(这是一个以chart [1] [indexOfgiver]开头的丑陋错误),并表示其为ArrayOutOfBoundsException,这意味着if语句行正在更改变量{{1 }}由于文件正确而由于某种原因无法正常工作。
这是我正在使用扫描仪读取的文件(“ gift1.in”):
indexOfgiver
即使调试器显示出在while循环的第一次运行中,〜giver〜等于“ mitnik”,〜chart [0] [0]〜也是如此,但是循环未设置〜indexOfgiver〜 ~~~到底是怎么回事?
答案 0 :(得分:3)
您在输入文件中的名称中有空格,因此,图表数组中的输入为“ Spafford” ,而不是您要匹配的“ Spafford” 。
由于不匹配,索引保持为-1并导致IndexOutofBoundsException。