我正在尝试移动数组中的元素。我尝试了这本书,但似乎没有用。 用户键入在主类中移动数组的数量,然后将其发送到移位器类中的移位方法。从数组位置[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--;
}
}
答案 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;
请查看以下链接,了解有关此例外的更多信息: -
答案 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];