java数组大小界限_Java:数组索引超出界限例外

Java:数组索引超出界限例外

System.out.print("Enter an integer: "); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int lArray = x - 2; int[] newArray = new int[lArray]; System.out.println("Let's display all possible integers..."); for (int i = 0; i <= newArray.length; i++) { newArray[i] = i + 2; System.out.print(newArray[i] + " "); }

我刚刚开始使用Java,但是我确定,如果我用另一种语言编写类似的代码,我将面临同样的问题。 这是一个应用程序的摘录,它列出了所有素数,直到用户input。

之所以用x-2作为lArray的定义是因为数组的长度将是从2到数字{2,3,4,5 … x}的所有整数。

我注意到了这一行

for (int i = 0; i <= newArray.length; i++) {

如果我将i <= newArray更改为i < newArray ,则代码将正常工作。 但是,如果x是素数,那么用户的inputx就不存在了,这是一个问题。

你应该使用

for (int i = 0; i <= newArray.length; i++) ^^

如果使用任何数组, foo有效索引是[0,foo.length-1]

使用foo.length作为索引将导致ArrayIndexOutofBoundsException 。

还有lArray ,其中包含自然数<=x数字,但不包括一个数字1 ,其值应该是x-1而不是x-2 。

改为将数组长度改为(x - 1) ,并使用已经find的

你需要一个比你当前使用的数组大1个元素的原因是因为有(n - 1)候选者必须被考虑在2和n之间,而不是(n - 2) 。

例如,有两个候选人less于或等于三个(2和3),这两个恰巧恰好是质数。

for (int i = 0; i <= newArray.length; i++) //should be

你需要使用:

int lArray = x - 1;

并改变你的条件使用

在C / C ++的Java中,数组是基于ZERO的。 所以你的N值数组将从索引0到N-1 。

以你为例: {2, 3, 4, 5... x} 。

您将需要N-1值来存储所有正数,但是1个整数数组中。 所以,如果N等于4 ,你的数组将是:

newArray[0] = 2; newArray[1] = 3; newArray[2] = 4;

因此,数组长度必须是3 ( N-1 )。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值