这个问题来自G4G阵列旋转。我在第二个循环中收到一个错误,告诉我阵列超出范围。但是我不明白为什么。
import java.util.Scanner;
public class timba {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n, d;
n = sc.nextInt();
d = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
while (d > 0) {
int t;
t = arr[0];
for(int j = 0; j < arr.length; j++) {
arr[j] = arr[j+1];
}
arr[n-1] = t;
d--;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
答案 0 :(得分:0)
在第二个循环内,一旦j到达arr.length-1,因为索引从0开始,j + 1
索引将超出范围,因此它应为j < arr.length - 1
答案 1 :(得分:0)
这应该是您的例外情况:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
at timba.main(timba.java:30)
这是由于您的代码仅在我要输入6时才允许我输入7个元素。请看这行。
for(int i=0;i<arr.length;i++){
arr[i]=sc.nextInt();
}
说我指定n为5,因此数组的长度为5,但这让我输入6。可以通过在代码中加上-1来解决此问题。
for(int i=0;i<arr.length - 1;i++){
arr[i]=sc.nextInt();
}
我们接下来要看的代码是
for(int j=0;j<arr.length;j++){
arr[j]=arr[j+1];
}
这是初学者Java程序员常犯的错误。这总是会超出范围,因为当j = 4时,则是“ arr [4] = array [5]”,但是您的数组仅上升到arr [4],因为我只想输入5个元素。这就是编译器给您该异常的原因。您可以通过添加“ -1”来解决此问题,就像您先前犯的错误一样,这应该可以解决此异常。
for(int j=0;j<arr.length - 1;j++){
arr[j]=arr[j+1];
}
您的新代码应为
import java.util.Scanner;
public class timba {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int n,d;
n=sc.nextInt();
d=sc.nextInt();
int[] arr= new int[n];
for(int i=0;i<arr.length - 1;i++){
arr[i]=sc.nextInt();
}
while(d>0){
int t;
t=arr[0];
for(int j=0;j<arr.length - 1;j++){
arr[j]=arr[j+1];
}
arr[n-1]=t;
d--;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
这应该是例外情况,但是您还需要修复代码的功能,因为它没有给您应该的答案。我认为可以通过修改和更改while循环来解决问题(可能是问题所在。)
我希望您喜欢Java。祝您有美好的一天,并记得保持安全!