为什么我的代码不起作用?我想要以下内容:一个输入一个数字,程序打印出所有数字,直到输入的数字。这是我的更大代码问题的一部分。这就是为什么使用while(true)-loop
和break
以及稍后打印出来的数组对我来说这很重要。
让它运行,输入一个数字后它只会说:
"线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:5 at yt_brotcr_15ff.yt_brotcr_19_Schmierzettel5.main(yt_brotcr_19_Schmierzettel5.java:14)"
有什么问题?
以下是代码:
package yt_brotcr_15ff;
import java.util.Scanner;
public class yt_brotcr_19_Schmierzettel5 {
public static void main (String[] args) {
int i = 0;
int hochzähl = 1;
int eingabeB;
Scanner s = new Scanner(System.in);
eingabeB = s.nextInt();
int[] zahlArray = new int[eingabeB];
while (true) {
zahlArray[i] = hochzähl;
if (i > eingabeB) {
break;
}
i++;
hochzähl++;
}
for (int j = 0; j > eingabeB; j++) {
System.out.println(zahlArray[j]);
}
}
}
答案 0 :(得分:0)
这是你的问题......
zahlArray[i] = hochzähl;
如果i
大于或等于eingabeB
,则此行会出错。
您的支票必须先发生:
if (i >= eingabeB) {
break;
}
zahlArray[i] = hochzähl
请注意> = not>
答案 1 :(得分:0)
错误:
java.lang.ArrayIndexOutOfBoundsException
被抛出:
int[] zahlArray = new int[eingabeB];
while (true) {
zahlArray[i] = hochzähl;
if (i > eingabeB) {
break;
}
i++;
hochzähl++;
}
第一行创建一个带有eingabeB
条目的数组,从0开始。因此,最后一个条目的索引为eingabeB-1
,而不是代码所需的eingabeB
。
有几种解决方法,您可以尝试:
if (hochzähl > eingabeB) { // code
例如。
答案 2 :(得分:0)
因为,您试图访问超出其大小的数组索引。请注意,数组索引从0
开始,一直到length -1
。因此,如果zahlArray
大小为4,那么最大数组索引可以是3
。
现在,想象i=3
,大于4.因此,(i > eingabeB)
会false
。因此,循环继续并将i
值增加到4.现在,如您所知,您无法访问数组大小为4
的索引4
,访问此索引将为您提及异常。
zahlArray[i] = hochzähl;
if (i > eingabeB)
{
break;
}
i++;
hochzähl++;
要更正此问题,您应在递增(i > eingabeB)
值后移动i
。它应该像
zahlArray[i] = hochzähl;
i++;
if (i > eingabeB)
{
break;
}
hochzähl++;