在Java中使用第三个变量进行交换

在Java中使用第三个变量进行交换,java,Java,需要使用第三个变量来交换数字吗?对不起,我不明白 下面是我的示例代码,用于根据每个元素的长度对数组的元素进行排序。正如您在这里看到的,我正在使用第三个变量,并交换数组的元素。我对这个程序有一个不同的实现,但我在网上找到了下面的例子,我想了解什么是交换有用的?如果有人能向我解释,那就太好了 public class StringSort { public static void main(String[] args) { String[] arr = new String[

需要使用第三个变量来交换数字吗?对不起,我不明白

下面是我的示例代码,用于根据每个元素的长度对数组的元素进行排序。正如您在这里看到的,我正在使用第三个变量,并交换数组的元素。我对这个程序有一个不同的实现,但我在网上找到了下面的例子,我想了解什么是交换有用的?如果有人能向我解释,那就太好了

public class StringSort {
    public static void main(String[] args) {
        String[] arr = new String[] { "abcd", "dexter", "stringsortexample", "fruit", "apple","car" };              
        compareArrayElements(arr);      

        System.out.println("The strings in the sorted order of length are: ");
        for (String sortedArray : arr) {
            System.out.println(sortedArray);
        }
    }

    public static void compareArrayElements(String[] arr) {
        String temp = "";
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if (arr[i].length() > arr[j].length())
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }       
    }
}
公共类StringSort{
公共静态void main(字符串[]args){
字符串[]arr=新字符串[]{“abcd”、“dexter”、“stringsortexample”、“水果”、“苹果”、“汽车”};
比较元素(arr);
System.out.println(“按长度排序的字符串为:”);
用于(字符串分拣机Darray:arr){
系统输出打印LN(SorterDarray);
}
}
公共静态空比较器数组元素(字符串[]arr){
字符串temp=“”;
对于(int i=0;iarr[j].length())
{
温度=arr[i];
arr[i]=arr[j];
arr[j]=温度;
}
}
}       
}
}
这是交换的一部分。如果没有临时临时临时变量,您将在移动中丢失信息

例如:INTA=5,b=10

现在在没有温度的情况下交换a和b:a=b;-->a=10,b=10->5丢失,无法检索或获取。或者让我们试试:b=a;-->a=5,b=5->10丢失,无法检索

温度:

  • 温度=a;-->a=5,b=10,温度=5
  • a=b;-->a=10,b=10,温度=5
  • b=温度;-->a=10,b=5,温度=5
  • a和b现在互换
就这样。临时变量存储一个变量的原始状态,因为在为该变量分配新状态(或值)时,该状态会被覆盖并丢失

在您的示例中,使用交换将数字(信息)的位置与不同位置的数字交换。这里有一个排序算法,属于的类别(而不是其他答案所建议的)

观看气泡排序链接上的动画图像,您会了解交换的想法,然后查看选择排序链接以了解这里发生了什么

在代码示例中,算法检查第一个位置,并将其与数组中的任何其他位置进行比较。如果它在第一个位置找到一个较小的值作为当前值,它将交换两个数字。在外循环(内循环第一次完全完成)的一次迭代后,数组中的第一个位置在整个数组中保持最小的值,因为如果它较大,则与较小的位置交换,如果您测试其上的所有值,则它包含最小的值


在循环中的下一次运行(i=0++=1)时,将对照第二个位置(i=1)测试数组的其余部分(i+1=2)。因此,在第二次迭代之后,索引1(arr)包含第二个最小的数字(索引0,arry[0]包含最小的数字)。直到以这种方式处理数组的所有索引(实际上,最后一个索引不能与其他索引一起检查,因为它确实是最后一个索引),然后对数组进行排序。

第三个变量是临时存储要交换的值,如果是整数,你可以不用第三个变量,通过一些数学计算,比如 a=a+b-(b=a);,
顺便说一下,上面的代码永远不会对字符串数组进行排序。

交换对于更改数组的顺序很有用。 有时,您可能需要对数组进行排序或随机化,在这种情况下,您需要交换元素以获得所需的结果

第三个变量是必需的,因为您需要临时保存一个变量。 如果执行
arr[i]=arr[j]
操作,则使用
arr[j]
的内容覆盖
arr[i]
的内容,因此如果未保存该值,则会丢失该值


(通过执行所谓的涉及一些位修补的操作,您可以在不使用第三个变量的情况下交换值。)

这里的代码是众所周知的。它是用于对数组/列表的值进行排序的算法。该算法比较每一对相邻变量,如果它们顺序错误,则交换它们。文章中有一个小动画图片,可以帮助您了解什么是交换,请看一看。
例如,在
python
中,您可以在不使用临时变量的情况下交换两个变量,如下所示:

a, b = 1, 2
a, b = b, a # b is 1 and a is 2 now

<>但是在java和其他C++语言中,我知道(c,c++,c~)当你要交换两个变量时,你需要把第一个变量的值存储在一个临时变量中,把第二个变量的值赋值给第一个变量,然后分配给一个临时变量值(实际上是第一个变量的值)。到第二个变量。这就是它的工作原理。

这取决于你。。。你想如何使用它。。例如,解联立方程有很多方法要解,所以同样地,要实现的逻辑也有很多,你可以选择你想要的任何方法


就这一点而言,我相信在这里使用第三个变量将消除复杂性,提高可读性和理解性。

假设您尝试在不使用第三个变量的情况下进行交换

arr[i] = arr[j];
arr[j] = arr[i];

这里有一个明显的问题。因为您将arr[j]赋值给arr[i],反之亦然,所以它们彼此相等。第三个变量确保临时保存覆盖的变量的内容,然后将其分配给另一个变量

Let
a=1,b=2,c

c=a
; 表示
c=1

arr[i] = arr[j];
arr[j] = arr[i];
temp = arr[i];            
arr[i]= arr[j];            
arr[j]= temp;
int a = 10;
int b = 20;

a = a + b; 
b = a - b;
a = a - b;
Step 1: Move first value to temp (third variable in your case ); 
step 2: Move second value to first variable.
step 3: Move temp value to first variable.
for (int i=0;i<a.length; i++) {
    for (int j = i+1; j < a.length; j++) {
        if (a[i]>a[j]){
            a[i] = a[i]+a[j];
            a[j]= a[i]-a[j];
            a[i]= a[i]-a[j];
        }
    }
}