Вращение массива влево дает ошибку для некоторых входов - PullRequest
0 голосов
/ 28 июня 2019

Я попытался повернуть массив влево, используя метод грубой силы. Это работает для одних входов, а для других - ошибки. Куда я иду не так?

Рабочий ввод: 1 2 3 4 5 с вращением 2 мест

Фактический объем производства: 3 4 5 1 2

Не работает Ввод: 1 2 3 4 с вращением 2 мест

Ожидаемый результат: 3 4 1 2

Фактический результат: ArrayIndexOutofBoundsException

Код:

    import java.util.*;

    public class LeftRotation {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter number of elements");
        int len = in.nextInt();
        System.out.println("Enter the elements");
        int[] arr = new int[len];
        for(int i=0; i<len;i++)
        {
            arr[i] = in.nextInt();
        }
        System.out.println("Enter number of times to rotate");
        int k = in.nextInt();
        int[] arr1 = new int[k];
        for(int i=0;i<=k-1;i++)
        {
            arr1[i]=arr[i];
        }

        int[] arr2 = new int[len];
        for(int i=k;i<=len-1;i++)
        {
            if(i+k<=len+1)
            {
                arr2[i-k]=arr[i];
            }
        }

        for(int i=0;i<=k-1;i++)
        {
            if(i+k<=len)
            {
                arr2[i+k+1]=arr1[i];
            }   
        }
        for(int i=0;i<=len-1;i++)
        {
            System.out.println(arr2[i]);
        }
    }

    }

Я знаю, что это неэффективный способ решения этой проблемы, но я хочу получить основное решение этой проблемы.

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Обратите внимание, что временная переменная arr1 бесполезна: вы можете копировать элементы непосредственно из arr в arr2:

    for(int i=0;i<k;i++)
    {
        arr2[len-k+i]=arr[i];
    }
    for(int i=k;i<len;i++)
    {
        arr2[i-k]=arr[i];
    }
1 голос
/ 28 июня 2019

Это потому, что индекс arr2 выходит за пределы длины в случае четной длины (i + k + 1).

Вместо этого отслеживайте индекс arr2 в обоих циклах через другую переменную 'j' следующим образом:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter number of elements");
        int len = in.nextInt();
        System.out.println("Enter the elements");
        int[] arr = new int[len];
        for(int i=0; i<len;i++)
        {
            arr[i] = in.nextInt();
        }
        System.out.println("Enter number of times to rotate");
        int k = in.nextInt();
        int[] arr1 = new int[k];
        for(int i=0;i<=k-1;i++)
        {
            arr1[i]=arr[i];
        }

        int[] arr2 = new int[len];
        int j = 0;
        for(int i=k;i<=len-1;i++, j++)
        {
          arr2[j]=arr[i];
        }

        for(int i=0;i<=k-1;i++, j++)
        {
          arr2[j]=arr1[i];  
        }
        for(int i=0;i<=len-1;i++)
        {
            System.out.println(arr2[i]);
        }
    }

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