因此,此代码获取n的值并返回除数列表以及除数的总数。如果我删除Scanner
声明及其赋值给int n并简单地给int n一个值,代码运行完美。
然而,实际上它会返回:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Program.main(Program.java:25)
我不知道问题是什么。
import java.util.Scanner;
public class Program{
static int n;
static int x = 1;
static int [] arr = new int[n];
static int q = 0;
static int g = 0;
static int p = 1;
static int count;
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
while(x <= n){
arr [q] = p; //assigns value to each array index
g = n%arr[q]; // stores value of remainder
q++;
p++;
x++;
if (g == 0){ //counts and displays each time remainder = 0
count++;
System.out.println(q);
}
}
System.out.println(count + " Divisors");
}
}
答案 0 :(得分:2)
当arr
仍然没有值(在输入大小之前)时,声明n
的大小。这样做:
import java.util.Scanner;
public class Program {
static int n;
static int x = 1;
static int [] arr; //no size set
//...
//Other variables
//...
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
arr = new int[n]; //Now the size is set to the inputted number.
while(x <= n) {
//...
//Other code to find divisors
//...
}
}
}
您需要在输入arr
后命名n
的大小,否则大小设置为0
,从而导致ArrayIndexOutOfBoundsException
}。
这一行:
arr[q] = p;
实际上是什么导致了错误。 arr[q]
无法保留值,因为 没有arr[q]
。阵列没有大小,所以它不能容纳任何成员。
答案 1 :(得分:1)
static int n;
...
static int [] arr = new int[n];
您没有给n
一个值,因此它默认为0.因此,您将arr
初始化为长度为0的数组。这就是您获得Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
的原因。这是因为你的数组大小为0,所以即使索引0超出了数组的范围。
如果您在阅读扫描仪之前不知道n
,则应将代码更改为:
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int [] arr = new int[n];
...
}
答案 2 :(得分:0)
从
更改您的时间条件while(x <= n)
到
while(x < n)
<
意味着严格不到,所以你从1开始,而不是越界
编辑:
同样正如@CodingNinja所说,你必须改变并将一个int值定义为数组的大小,默认为0:
public static void main(String[] args){
static int n;
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
static int [] arr = new int[n];
while(x <= n){
arr [q] = p; //assigns value to each array index
g = n%arr[q]; // stores value of remainder
q++;
p++;
x++;
if (g == 0){ //counts and displays each time remainder = 0
count++;
System.out.println(q);
}
}
System.out.println(count + " Divisors");
}