为什么.equals在这种情况下不起作用?甚至调试器也没有意义

时间:2019-07-01 03:26:17

标签: java java.util.scanner

这是我的第一篇文章,所以对不起,如果我做得不好。 我正在尝试解决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〜 ~~~到底是怎么回事?

1 个答案:

答案 0 :(得分:3)

您在输入文件中的名称中有空格,因此,图表数组中的输入为“ Spafford” ,而不是您要匹配的“ Spafford”

由于不匹配,索引保持为-1并导致IndexOutofBoundsException。