Java ArrayIndexOutOfBoundsException从数组打印值时发生异常
用户输入值后,程序应打印出存储在大小为5的数组中的值 这是我的密码:Java ArrayIndexOutOfBoundsException从数组打印值时发生异常,java,arrays,for-loop,Java,Arrays,For Loop,用户输入值后,程序应打印出存储在大小为5的数组中的值 这是我的密码: import java.util.Scanner; public class Arrays_Qu1 { public static void main(String[] args) { Scanner sc= new Scanner(System.in); int arr[]= new int [5]; System.out.println("Enter a number"); i
import java.util.Scanner;
public class Arrays_Qu1 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int arr[]= new int [5];
System.out.println("Enter a number");
int i;
for (i=0;i<arr.length;i++) {
arr[i]=sc.nextInt();
}
System.out.println(arr[i]);
}
}
import java.util.Scanner;
公共类数组_Qu1{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int arr[]=新的int[5];
System.out.println(“输入一个数字”);
int i;
对于(i=0;i,因为您在循环外打印,并且它正在尝试打印超出数组边界的arr[5]。如果要打印每个元素,则打印应该在循环中
int i;
for (i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
System.out.println(arr[i]); // to print each element
}
// value of i is now 5, so arr[i] is invalid
System.out.println(arr[i-1]); // to print last element
System.out.println(Arrays.toString(arr)); // to print whole array
inti;
对于(i=0;i
因为您在循环外打印,而它正试图打印超出数组边界的arr[5]。如果要打印每个元素,则打印应该在循环中
int i;
for (i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
System.out.println(arr[i]); // to print each element
}
// value of i is now 5, so arr[i] is invalid
System.out.println(arr[i-1]); // to print last element
System.out.println(Arrays.toString(arr)); // to print whole array
inti;
对于(i=0;i
您应该访问数组的最后一个元素,如:
System.out.println(arr[i - 1])
但我相信打印数组的最后一个元素不是你想要的。所以你应该移动行
System.out.println(arr[i])
在for循环中,它应该是正常的。您应该访问数组的最后一个元素,如:
System.out.println(arr[i - 1])
但我相信打印数组的最后一个元素不是你想要的。所以你应该移动行
System.out.println(arr[i])
在for循环中,应该可以。循环后i
的值是多少?调试代码,您会看到i
在循环后将是5,超出索引边界[0,4]。这是因为循环在检查条件之前将增加i
,即它将增加i
到5,然后检查i
(即i<5
)然后终止循环-但是i
仍然是5。i++执行的次数比您想象的要多;在循环的最后一次迭代中,就在数组[]赋值之后。@Thomas谢谢,这是一个有用的解释!这应该在任何体面的循环教程中解释,但基本上是这样的:for(init;condition;increment){body;}
产生一个序列,如init,条件检查,body,increment,条件检查,body,increment,…
-当然,如果条件检查失败,该序列将结束。:)循环后i
的值是多少?调试代码,您将看到i
在循环后将是5,超出索引边界[0,4]。这是因为循环在检查条件之前将增加i
,即它将增加i
到5,然后检查i
(即,i<5
)并终止循环-但i
仍然是5。i++执行的次数比您想象的要多;在循环的最后一次迭代中,数组[]赋值之后。@Thomas谢谢,这是一个很有帮助的解释!这应该在任何像样的循环教程中解释,但基本上是这样的:(init;condition;increment){body;}
生成一个序列,如init,condition check,body,increment,condition check,body,increment,…
-当然,如果条件检查失败,序列将结束。:)