Поворот массива с алгоритмом жонглирования не удался - PullRequest
0 голосов
/ 13 апреля 2020

Этот вопрос относится к вращению массива G4G. Во втором l oop я получаю сообщение о том, что массив выходит из области видимости. Но я не понимаю, почему.

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 голосов
/ 13 апреля 2020

Это должно быть ваше исключение:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
    at timba.main(timba.java:30)

Это вызвано тем, что ваш код позволяет мне вводить 7 элементов, когда я только указал, что я хочу ввести 6. Посмотрите на эту строку.

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 программисты. Это всегда будет go вне пределов, потому что, когда 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]);
        }
    }
}

Это должно будь то для исключений, но вам также нужно исправить функциональность кода, поскольку он не дает вам ответ, который он должен. Я думаю, что это можно исправить, немного изменив и изменив время, пока l oop (может вызвать проблему. Int *)

Надеюсь, вам понравится ваше путешествие с Java. Хорошего дня и не забудьте остаться в безопасности!

0 голосов
/ 13 апреля 2020

Внутри второго индекса l oop, j + 1 выйдет за пределы, как только j достигнет arr.length - 1, так как индексы начинаются с 0, поэтому он должен быть j < arr.length - 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...