我所拥有的是一个打印出超过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);
}
}
}
答案 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();
}
}