Java中的循环计数

时间:2016-09-07 16:40:51

标签: java

我所拥有的是一个打印出超过4000个随机数字的程序,范围为1到99999.打印后,它会显示范围和其他一些内容,然后要求用户输入5个数字,告诉它有多少次运行循环,但是我在main打印时遇到异常,它来自main for循环。屏幕截图已附上。期望应该看起来像:

(随机生成的数字):

25

192

33

(用户输入)请输入数字:33

(系统响应)找到该号码需要3次。

如果未列出数字,因为它超过4000个整数,它会说,找不到。

以下是代码和屏幕截图:

Screenshot      主java.lang.ArrayIndexOutOfBoundsException中的异常:0

谢谢!

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);

    int[] input = new int[0];
    int[] arrayone = new int[4096];

    int loop = 0;

    for(int i = 0; i < arrayone.length; i++) {
        arrayone[i] = (int)(Math.random() * 99999 + 1);

        for(int in = 0; in<input.length; in++) {
            if (arrayone[i] == input[in]) {
                loop++;
            }
        }
    }
    for (int i = 0; i < 5; i++) {
        System.out.println("Please enter a number between " + min + " and " + max);
        input[0] = s.nextInt();

        if (min <= input[0] && input[0] <= max) {
            System.out.println("It took " + loop + " time(s) to find the number " + input);
        }   
    }
}

2 个答案:

答案 0 :(得分:0)

int[] input = new int[0];

这会创建一个大小为0的数组,因此当您尝试保存值时会抛出异常,因为您超出了数组大小。

解决方案:设置数组的有效大小或使用列表。

ArrayList是(简化)可调整大小的数组版本。像这样使用它:

List<Integer> input = new ArrayList<>();
input.add(5); //Adds 5 to list
input.get(0); //Read object of index 0

for(int value : list) { //Loop: for each element in list ...
    System.out.println(value);
}

//Checks whether list contains 5
System.out.println(list.contains(5));

另外,你真的需要input成为一个数组吗?因为现在看起来你根本不需要它。

答案 1 :(得分:0)

输入数组的问题是你用0的大小初始化它,所以当你试图访问第一个位置[0]时,你的数组大小为0时就会用完边界。回答你在提问之前也试图确定循环。在执行此操作时,您还尝试通过大小为0的输入数组的边界。您应该首先初始化数组,然后为每个猜测循环初始化并确定它是否在您的范围内最大和最小。另请注意,仅仅因为数字在最大值和最小值内并不能保证数字包含在数组中,因为数字不会从最大值到最小值。在进行for循环检查后,您应该检查最终的位置。

public static void main(String random[])
{
    Scanner s = new Scanner(System.in);

    int input = new int[5];
    int[] arrayone = new int[4096];

    int loop = 0;

    //don't do anything here except fill the array with values
    for(int i = 0; i < arrayone.length; i++) {
        arrayone[i] = (int)(Math.random() * 99999 + 1);
    }

    //ask the user for 5 inputs
    for (int index = 0; index < input.length; index++) {

        System.out.println("Please enter a number between " + min + " and " + max);
        input[index] = s.nextInt();
        //check to see if the number is valid
        if (min <= input[index] && input[index] <= max) {
            //loop through the arrayone to determine where it is
            for(int i = 0; i < arrayone.length; i++) {
                //if it is not in the current index at i increment the loop count
                if (arrayone[i] != input[index]) {
                    loop++;
                }
                //we have found where it is and should break out of the loop
                else {
                    break;
                }
            }
            //check if we found it based on how much we incremented
            if(i != arrayone.length)
            {
                //output how long it took to find the number
                System.out.println("It took " + loop + " time(s) to find the number " + input[index]);
            }
            else
            {
                System.out.println(input[index] + " not found!");
            }
            //now reinitialize the loop to 0 for the next guess
            loop = 0;
        }   
    }
    //always remember to close your scanners
    s.close();
    }

}