为什么这不会反转阵列?

时间:2014-04-07 18:07:00

标签: java

我想到了,尝试了不同的事情大约一个小时但却无法想出任何东西。我不想在这里发帖,因为我想弄清楚自己,但是我只是得到了一些东西

class Exercise5
{
public static void main ( String[] args )
{
int[] val = {0, 1, 2, 3}; 
int temp;

System.out.println( "Original Array: " 
    + val[0] + " " + val[1] + " " + val[2] + " " + val[3] );

// reverse the order of the numbers in the array
for( temp = 0; temp < val.length; temp++) {

    val[temp] = val[3 - temp];


}



System.out.println( "Reversed Array: " 
    + val[0] + " " + val[1] + " " + val[2] + " " + val[3] );
 }
}

它'打印出3 2 2 3,我尝试了不同的策略

8 个答案:

答案 0 :(得分:3)

<强>问题:

temp = 0

val[0] =val[3];

temp = 1

val[1] =val[2];

temp = 2

val[2] =val[1];

temp = 3

val[3] =val[0];

<强>解决方案:

使用另一个数组来保存反转值或使用临时变量(0&amp; 3,1&amp; 2)一次交换两个值

答案 1 :(得分:2)

for( temp = 0; temp < val.length; temp++) {
    val[temp] = val[3 - temp];
}

这是做什么的;

val = [0, 1, 2, 3]

val[0] = val[3]
=> val = [3, 1, 2, 3]

val[1] = val[2]
=> val = [3, 2, 2, 3]

val[2] = val[1]
=> val = [3, 2, 2, 3]

val[3] = val[0]
=> val = [3, 2, 2, 3]

你想要做的是将索引循环到数组的一半,交换低值和高值。

答案 2 :(得分:0)

试试这个

// reverse the order of the numbers in the array
for( temp = 0; temp < val.length/2; temp++) {
    int tmp = val[temp];
    val[temp] = val[3 - temp];
    val[3 - temp] = tmp;

}

答案 3 :(得分:0)

你必须使用另一个数组。您正在根据需要更改原始值。或者如果长度是均匀的,你可以交换它们

答案 4 :(得分:0)

首先,

val [temp] = val [3 - temp];

只将val [3-temp]的值分配给val [temp],它不会交换它们。如果要交换它们,则需要使用临时变量。

其次,

你只需要在数组的中途迭代,而不是一直遍历它。

答案 5 :(得分:0)

val [temp] = val [3 - temp];

当temp = 0

val [0] = val [3-0] val [0] = val [3] = 3

当temp = 1

val [1] = val [3-1] val [1] = val [2] = 2

当temp = 2

val [2] = val [3-2] val [2] = val [1] = 2(上一步你可以看到val [1] = 2)

当temp = 3

val [3] = val [3-3] val [3] = val [0] = 3

结果3 2 2 3

答案 6 :(得分:0)

这一行是for循环中的罪魁祸首:

val[temp] = val[3 - temp];

让我们回顾迭代,看看它在做什么。

  1. val [0] = val [3] - &gt; 3,1,2,3
  2. val [1] = val [2] - &gt; 3,2,2,3
  3. val [2] = val [1] - &gt; 3,2,2,3
  4. val [3] = val [0] - &gt; 3,2,2,3

答案 7 :(得分:0)

大多数人都给了你分析。这是您可以解决的问题。

再声明一个int数组

int[] val = {0, 1, 2, 3}; 
int temp;
int[] reverseVal = new int[val.length];

添加到此数组的反转值

for( temp = 0; temp < val.length; temp++) {

    reverseVal [temp] = val[val.length - temp];

}