让我说我有阵列:
int[] taco = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
如何根据索引将元素移动到前面?例如:
将元素taco [5]移动到前面应该产生这个:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
// becomes
{5, 0, 1, 2, 3, 4, 6, 7, 8, 9}
编辑: 如果int是对象,它会有所不同吗?
答案 0 :(得分:7)
int
变量taco[0]
,在这种情况下) 如果它是int
值或对象的数组,则没有任何区别。算法是一样的。由于Object
引用数组实际上是32位或64位内存引用的数组,因此您实际上仍在复制整数。
这是可以做到的代码 - 有几种方法可以做到这一点,但这是基本的想法:
public int[] moveValueAtIndexToFront(int[] arrayToBeShifted, int index) {
int valueBeingMoved = originalArray[index];
for (int i = index; i > 0; i--) {
arrayToBeShifted[i] = arrayToBeShifted[i-1];
}
arrayToBeShifted[0] = valueBeingMoved;
return arrayToBeShifted;
}
0
,则无法移动任何内容。如果您感到好奇,可以通过the OpenJDK project查看arraycopy
的源代码。
答案 1 :(得分:5)
int[] taco = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int index = 5;
int temp = taco[index];
for(int i = index; i > 0; i--) {
taco[i] = taco[i-1];
}
taco[0] = temp;
答案 2 :(得分:2)
int[] taco = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int indexTarget = 7;
int valueAtIndex = taco[indexTarget];
for(int i = indexTarget; i > 0; i--){
taco[i] = taco[i-1];
}
taco[0] = valueAtIndex;
答案 3 :(得分:1)
由于Java数组具有固定大小,因此您应该创建一个新数组,并循环遍历这些元素:
/**
* Moves the element wanted to the front of the array, and returns a new array.
* @param array The array to adjust
* @param position The position of the element
* @return The adjusted array
*/
private int[] moveElement (int[] array, int position)
{
// Create temporary array to hold values
int[] tempArray = new int[array.length];
// Set first value to your wanted element
tempArray[0] = array[position];
// Set values of array before array[position]
for (int tempPosition = 0; tempPosition < position; tempPosition++)
{
tempArray[tempPosition + 1] = array[tempPosition];
}
// Set values of array after array[position]
for (int tempPosition = position + 1; tempPosition < array.length; tempPosition++)
{
tempArray[tempPosition] = array[tempPosition];
}
// Return newly created array
return tempArray;
}
答案 4 :(得分:1)
对于新添加的问题:不,它没有任何区别,你只需要使用对象类型变量的临时变量而不是int变量。
答案 5 :(得分:0)
private int[] moveToZero (int[] workOnArray, int position) {
workOnArray[0]=workOnArray[position]+workOnArray[0];
workOnArray[position]=workOnArray[0]-workOnArray[position];
workOnArray[0]=workOnArray[0]-workOnArray[position];
return workOnArray;
}
答案 6 :(得分:0)
我写了一个样本,你可以查一下:
public static void main(String[] args) {
int[] taco = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int index = 2;
int tmp = taco[0];
int preValue;
taco[0]=taco[index];
for(int i=1,n=taco.length;i<n;i++){
if(i==index+1)
break;
preValue = taco[i];
taco[i]=tmp;
tmp=preValue;
}
for(int i=0,n=taco.length;i<n;i++){
System.out.println(taco[i]);
}
}