Java 为什么赢了';这不是阵列反转吗?

Java 为什么赢了';这不是阵列反转吗?,java,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] + " " + v

我想了想,试了大约一个小时的不同的东西,但什么也没想到。我不想在这里发帖,因为我想自己弄明白,但有些东西我没弄明白

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] );
 }
}
课堂练习5
{
公共静态void main(字符串[]args)
{
int[]val={0,1,2,3};
内部温度;
System.out.println(“原始数组:”
+val[0]+“”+val[1]+“”+val[2]+“”+val[3]);
//颠倒数组中数字的顺序
用于(温度=0;温度

它用我尝试过的每一种不同的策略打印出3个问题:

温度=0

val[0] =val[3];
温度=1

val[1] =val[2];
温度=2

val[2] =val[1];
温度=3

val[3] =val[0];
解决方案:


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

问题:

温度=0

val[0] =val[3];
温度=1

val[1] =val[2];
温度=2

val[2] =val[1];
温度=3

val[3] =val[0];
解决方案:

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

// 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;

}
//颠倒数组中数字的顺序
用于(温度=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;

}
//颠倒数组中数字的顺序
用于(温度=0;温度
您必须使用另一个数组。您正在更改原始文件的值,然后再进行更改。或者,如果长度为偶数,您可以交换它们

您必须使用另一个数组。您正在更改原始文件的值,然后再进行更改。或者如果长度为偶数,您可以先交换它们


val[temp]=val[3-温度]

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

第二,

您只需要在数组中迭代一半,而不是一路迭代。

首先

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

val[temp]=val[3-温度]

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

第二,

您只需要在数组中迭代一半,而不是一路迭代

for( temp = 0; temp < val.length; temp++) {
    val[temp] = val[3 - temp];
}
您要做的是在数组的一半中循环索引,并交换低值和高值


您要做的是在数组的一半中循环索引,并交换低值和高值。

val[temp]=val[3-temp]

当温度=0时

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

当温度=1时

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

当温度=2时

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

当温度=3时

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


结果3 2 3

val[temp]=val[3-temp]

当温度=0时

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

当温度=1时

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

当温度=2时

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

当温度=3时

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


结果3 2 3

这条线是for循环中的罪魁祸首:

val[temp] = val[3 - temp];
让我们回顾一下迭代,看看它在做什么

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

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

    val[temp] = val[3 - temp];
    
    让我们回顾一下迭代,看看它在做什么

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

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

    再声明一个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];
    
    }
    
    for(temp=0;temp
    大多数人都给了你分析。这就是您可以解决的问题

    再声明一个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];
    
    }
    
    for(temp=0;temp
    手动尝试运行此算法的可能重复。手动尝试运行此算法的可能重复。你成功了。加一。添加一些描述会让事情更清楚。你说得对。加一。添加一些描述会更清楚。即使长度是奇数,也可以在不使用其他数组的情况下就地交换它们。只是不要交换中间的项(或者与其本身交换,这是不可操作的)。您可以在不使用其他数组的情况下交换它们,即使长度是奇数。只是不要交换中间项(或与其本身交换,这是不可操作的)。不需要第二个数组。@DavidConrad,那么您有什么建议。。交换同一数组中的一对值?当然可以。使用一个临时int变量,可以从两端向中间成对交换它们。我发现,这是一个非常常见的习惯用法,用于就地反转数组。不需要第二个数组。@DavidConrad,那么你有什么建议。。交换同一数组中的一对值?当然可以。使用一个临时int变量,可以从两端向中间成对交换它们。我发现,这是一个非常常见的习惯用法,用于就地反转数组。