在数组中移动元素

时间:2014-06-10 01:23:54

标签: java arrays sorting shift

我正在尝试移动数组中的元素。我尝试了这本书,但似乎没有用。 用户键入在主类中移动数组的数量,然后将其发送到移位器类中的移位方法。从数组位置[1]开始。

这就是我所拥有的:

// Pos is the users entered for how many positions to shift
// data is the array of elements 1-length of data
// temp is place holder

public void shift(int pos)
{
    while(pos > 0)
    {
        int temp = data[data.length];

        for(int i = pos; i == data.length; i++ )
        {
            data[i+1] = data[i];
        }
        data[data.length] = temp;
        pos--;
    }   
}

6 个答案:

答案 0 :(得分:1)

将它放入一个带有某种break命令的while循环中,在这个例子中" quit"

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);  

boolean run = true;
while(run){
    System.out.println("What would you like to shift?");
    String input = br.readLine();

    if(input.equals("quit")) break;
    else{
        int pos = Integer.parseInt(input);
        int temp = data[pos];

        for(int i = pos; i<data.length-1; i++)  {
            data[i] = data[i+1];
        }
    }  
}

当然,您需要对输入进行错误检查,以确保它是数组中的有效位置。然而,我是从机器人发布这个,并且在手机上编码是一种痛苦。

这段代码也比你要求的要多一些,但它给出了while循环逻辑背后的想法。另外,我刚刚阅读了您的编辑,我不确定我是否理解究竟发生了什么,但再次希望这可能有所帮助。本来可以作为评论,但显然它有点冗长。

答案 1 :(得分:1)

int temp=data[data.length-1];
for(int i=data.length-1;i>=1;i--)
{
data[i+1] = data[i];
}
data[0]=temp;

答案 2 :(得分:0)

您获得 ArrayIndexOutOfBoundsException 的原因是您的数据数组的大小为data.length(从1开始计算),但您尝试访问data[data.length]元素在循环的最后一次迭代中,由于在Java中从0开始的数组索引,数组的data.length+1元素不存在且超出数组的范围。

正确代码: -

// within your while loop
int temp=data[data.length-1];
for(int i=data.length-1;i>=1;i--)
{
  data[i] = data[i-1];
}
// decrease the position now
 data[0]=temp;

请查看以下链接,了解有关此例外的更多信息: -

ArrayIndexOutOfBoundsException---How to Handle

答案 3 :(得分:0)

如果您想要从{1}}位置向右和向右移动,这是您可以做的:

pos

答案 4 :(得分:0)

可能是最简单的解决方案:

private static void shiftArray(int[] array) {

    for (int i = 0; i < array.length - 1; i++) {

      int temp = array[i];
      array[i] = array[i + 1];
      array[i + 1] = temp;
    }

    for (int p : array)
      System.out.print(p +  " ");
  }
}

答案 5 :(得分:0)

对于迟到的回答感到抱歉,但我认为最简单的方法是使用这样的模块:

int[] original = { 1, 2, 3, 4, 5, 6 };
int[] reordered = new int[original.length];
int shift = 1;

for(int i=0; i<original.length;i++)
    reordered[i] = original[(shift+i)%original.length];