使用杂耍算法的阵列旋转失败

时间:2020-04-13 15:25:36

标签: java arrays debugging rotation

这个问题来自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]);
        }
    }

}

2 个答案:

答案 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。祝您有美好的一天,并记得保持安全!