Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t跟踪java.lang.ArrayIndexOutOfBoundsException:_Java_Debugging - Fatal编程技术网

Can';t跟踪java.lang.ArrayIndexOutOfBoundsException:

Can';t跟踪java.lang.ArrayIndexOutOfBoundsException:,java,debugging,Java,Debugging,我正在尝试解决以下简单的编程练习:“编写一个程序,读取1到10之间的整数,并计算每个整数的出现次数。假设输入以0结尾”。我想出了以下解决办法。我不熟悉调试器,并在过去3小时内尝试跟踪ArrayIndexOutOfBoundsException。也许有人能看到出现的whereArrayIndexOutOfBoundsException import java.util.Scanner; public class Exercise07_03 { /** Main method */

我正在尝试解决以下简单的编程练习:“编写一个程序,读取1到10之间的整数,并计算每个整数的出现次数。假设输入以0结尾”。我想出了以下解决办法。我不熟悉调试器,并在过去3小时内尝试跟踪
ArrayIndexOutOfBoundsException
。也许有人能看到出现的where
ArrayIndexOutOfBoundsException

import java.util.Scanner;

public class Exercise07_03 {
    /** Main method */
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int[] numbers = new int[10];
        System.out.print("Enter up to 10 integers between 1 and 10" + 
            "inclusive (input ends with zero): ");

        int i = 0;
        do {
            numbers[i] = input.nextInt();
            i++;
        } while (numbers[i] != 0 && i != 9);

        displayCounts(countNumbers(numbers));
    }

    /** Count the occurrences of each number */
    public static int[] countNumbers(int[] numbers) {
        int[] counts = new int[10];

        for (int i = 0; i < counts.length; i++)
            counts[numbers[i] - 1]++;

        return counts;
    }

    /** Display counts */
    public static void displayCounts(int[] counts) {
        for (int i = 1; i < counts.length + 1; i++)
            if (counts[i - 1] != 0)
                System.out.println(i + " occurs " + counts[i - 1] + " time");
    }
}
import java.util.Scanner;
公开课练习07_03{
/**主要方法*/
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
整数[]个数=新整数[10];
System.out.print(“输入最多10个介于1和10之间的整数”+
“包含(输入以零结尾):”;
int i=0;
做{
数字[i]=input.nextInt();
i++;
}而(数字[i]!=0&&i!=9);
显示计数(计数(数字));
}
/**计算每个数字的出现次数*/
公共静态int[]计数编号(int[]编号){
int[]计数=新的int[10];
for(int i=0;i
结果-如果输入包含0,则为1。

问题在于:

public static int[] countNumbers(int[] numbers) {
    int[] counts = new int[10];

    for (int i = 0; i < counts.length; i++)
        counts[numbers[i] - 1]++;

    return counts;
}

这将检查(数字1)是否大于零。如果不是,则使用0。如果为true,则使用数字-1。

ArrayIndexOutofBounds异常通常发生在您在某些地方出现“off by one”错误时。如果调试器有问题,不妨在循环中进行一些打印调试,并验证您的索引在任何时候都是您认为的索引。我想我实际上也说过同样的话,但一句赞美就可以了;)不,解释问题就行了。我走过去告诉他问题出在哪里以及如何解决。
public static int[] countNumbers(int[] numbers) {
    int[] counts = new int[10];

    for (int i = 0; i < counts.length; i++)
        counts[numbers[i] - 1]++;

    return counts;
}
 counts[(number - 1 > 0) ? number - 1 : 0]++;