使用第三个变量交换数字需要什么?对不起,但是我没理解。
以下是我根据每个元素的长度对数组元素进行排序的示例代码。正如你在这里看到的,我正在使用第三个变量,并交换数组的元素。我有一个不同的实现这个程序,但我在网上找到了以下的例子,并想了解什么是交换有用的?如果有人可以向我解释,那就太好了。
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;
}
}
}
}
}
答案 0 :(得分:23)
简短的回答是你不能用Java来处理!
将每个变量视为可以“保持”#34;一个价值;例如一个球。
如果你有两只手和两个球,将球转向对手的唯一方法就是将一个球扔到空中(或类似的东西)。但是没有&#34;抛出一个价值空气&#34;在Java中运作。
如果你不能玩,你需要第三只手(或其他一些临时控制位置)来换球。用Java术语来说,这意味着一个临时变量。
为了记录,我发现这个类比在我学习编程时非常有用。但是不要太过分了: - )。
(事实上,如果我们谈论的是整数,你可以用一个数学技巧来交换数字......涉及XOR ......但它一般都不起作用。)
答案 1 :(得分:6)
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
这是交换的一部分。如果没有临时的临时变量,您将失去信息。
示例:int a = 5,b = 10;
现在交换a和b没有temp:a = b; - &GT; a = 10,b = 10 - > 5丢失无法检索或获取它。或者让我们试试:b = a; - &GT; a = 5,b = 5 - &gt; 10丢失了,无法取回它。
使用temp:
就是这样。临时变量存储一个变量的原始状态,因为当变量被赋予其新状态(或值)时,该状态被覆盖并丢失。
在您的示例中,您使用交换来更改具有多个不同位置的数字(信息)的位置。在这里,您有一个排序算法,该算法属于Selection Sort类别(而不是其他答案建议的bubble sort)。
在Bubble Sort链接中观看动画图像,您可以了解交换,然后查看Selection Sort链接以了解这里发生了什么。
在您的代码示例中,算法会检查第一个位置,并将其与数组中的任何其他位置进行比较。如果它在第一个位置找到一个较小的值作为当前值,则它会交换两个数字。在外循环的一次迭代之后(内循环第一次完全完成),数组中的第一个位置保持整个数组中的最小值,因为如果它更大,则它与较小的一个交换,如果你测试了全部它上面的值包含最小的值。
在循环中的下一次运行(i = 0 ++ = 1)中,针对第二位置(i = 1)测试阵列的其余部分(i + 1 = 2)。所以在第二次迭代之后,索引1(arr 1)包含第二个最小的数字(和索引0,arry [0]包含最小的数字)。这样做直到数组的所有索引都以这种方式处理 - 实际上最后一个索引不能与其他索引一起检查,因为它确实是最后一个 - 因此数组被排序。
答案 2 :(得分:4)
这里的代码是众所周知的bubble-sort。它是用于对数组/列表的值进行排序的算法。该算法比较每对相邻变量,如果它们的顺序错误则交换它们。文章中有一个小动画图片,可以帮助您掌握交换的内容,看看它。
例如,在python
中,您可以使用临时变量来交换两个变量,如下所示:
a, b = 1, 2
a, b = b, a # b is 1 and a is 2 now
但是在Java和其他类似C语法的语言中我知道(C,C ++,C#)当你想要交换两个变量时,你需要将第一个变量的值存储在一个临时变量中,赋值为second变量到第一个变量,然后分配存储在临时变量值(实际上是第一个变量的值)到第二个变量。这是它的工作原理。
答案 3 :(得分:2)
temp = arr[i];
arr[i]= arr[j];
arr[j]= temp;
你只是假设 ARR [I] = 5; ARR [J] = 6; 如果你尝试交换出temp变量。 那你就会失去像这样的数据 arr [i] = arr [j]; // arr [i] = 5且arr [j] = 5 arr [j] = arr [i]; //都有谷5。 我认为你理解了temp变量的想法
答案 4 :(得分:1)
我们只是说你试图在不使用第三个变量的情况下进行交换。
arr[i] = arr[j];
arr[j] = arr[i];
这里有一个明显的问题。因为您将arr [j]分配给arr [i],反之亦然,它们彼此相等。第三个变量确保您临时保存您覆盖的变量的内容,然后您可以将其分配给另一个变量。
答案 5 :(得分:1)
让a=1, b=2, c;
c=a
;
表示c=1
;
让a
为空。
a=b
;
表示a=2
;
让b
为空。
b=c
;
表示b=1
;
您可以看到a
和b
交换的值。
答案 6 :(得分:1)
第三个变量将帮助您交换2个值,特别是在字符串上。
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];
}
}
}
这里不需要任何第三个变量。
答案 7 :(得分:0)
第三个变量是临时存储你要交换的值,如果是整数,你可以通过一些数学计算来做到这一点而不使用第三个变量 a = a + b-(b = a);, 顺便说一下,上面的代码永远不会对字符串数组进行排序。
答案 8 :(得分:0)
交换对于更改数组的顺序很有用。 有时您可能想要对数组进行排序或者随机化它,在这种情况下,您需要交换元素以获得所需的结果。
需要第三个变量,因为您需要临时保存一个变量。
如果您执行arr[i] = arr[j]
,则会覆盖arr[i]
的内容,其内容为arr[j]
,因此如果您尚未保存,则会丢失该值。
(你可以通过做一个所谓的XOR swap而不使用第三个变量来交换值,这涉及一些修补。)
答案 9 :(得分:0)
那么在java中,没有必要使用第三个变量来交换2个变量。但是当你使用第三个变量时很容易。
不使用第三个变量
int a = 10;
int b = 20;
a = a + b;
b = a - b;
a = a - b;
答案 10 :(得分:0)
出于同样的原因,当两辆车在非常狭窄的街道上相互驶向时,其中一辆车需要停在停车位以便让另一辆车通过。 (因为两辆车或两个值不能同时占据同一空间而至少其中一辆被销毁)。
这个比喻并不准确。如果第一辆车克隆到一个停车位,然后第二辆车开过第一辆车,摧毁它,那么第一辆车的克隆就会起飞,那就更准确了。
(或者更确切地说:
呃,没关系,为了简单起见,我们放弃精确度。)
答案 11 :(得分:-1)
这取决于你...你想如何使用它..例如,求解联立方程有许多方法需要解决,所以同样的方法有多少逻辑要实现,你可以选择任何你想... ...
就这一点而言,我相信在这里使用第三个变量将消除复杂性并提高可读性和理解力。