在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];
}
}
}