我尝试通过蛮力方法使阵列旋转。它适用于某些输入,而对于其他输入则会产生错误。我要去哪里错了?
有效输入: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]);
}
}
}
我知道这不是解决此问题的有效方法,但我想获得对此的基本解决方案。
答案 0 :(得分:1)
这是因为在偶数长度为(i + k + 1)的情况下,arr2的索引超出了长度。
而是通过不同的变量'j'跟踪两个循环中arr2的索引,如下所示:
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]);
}
}
}
答案 1 :(得分:1)
请注意,临时变量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];
}