java交换操作员临时
我试图理解如何编写下面涉及交换/交换运算符的语句的逻辑。到目前为止,我一直在谷歌上搜索文本(java问题解决简介)。以前是否有人在以下问题上遇到过困难,并可能找到了答案(这是一个关于字符串的示例,但我通常在使用temp的交换运算符时遇到过困难): 有两个字符串变量s1和s2已经声明和初始化。编写一些代码来交换它们的值 我知道我应该使用一个临时变量,这正是我的逻辑为空的地方 我写它的方式,我知道它的错误如下:java交换操作员临时,java,Java,我试图理解如何编写下面涉及交换/交换运算符的语句的逻辑。到目前为止,我一直在谷歌上搜索文本(java问题解决简介)。以前是否有人在以下问题上遇到过困难,并可能找到了答案(这是一个关于字符串的示例,但我通常在使用temp的交换运算符时遇到过困难): 有两个字符串变量s1和s2已经声明和初始化。编写一些代码来交换它们的值 我知道我应该使用一个临时变量,这正是我的逻辑为空的地方 我写它的方式,我知道它的错误如下: temp = s1; s2 = temp; 把变量想象成只能容纳一件东西的容器。要交换
temp = s1;
s2 = temp;
把变量想象成只能容纳一件东西的容器。要交换两个变量的值,需要三个容器
String s1 = "Some string", s2 = "Another string", tmp;
tmp = s1; // put the first item into the third bin
s1 = s2; // put the second item into the first bin
s2 = tmp; // put the first item into the second item
在不正确的解决方案中,您丢失了
s2
的值。您希望使用temp
保留任一变量的值,以便在交换过程中不会丢失该值
下面列出了您需要做的事情:
- 在某处复制
的值s1
- 现在,保存
的副本后,您可以将s1
的值分配给s2
s1
- 现在将您制作的
副本分配给s1
s2
temp = s1; // temporarily store the s1 value because we'll replace it next
s1 = s2; // now s1 lost it's value, and got a new one
s2 = temp; // luckily s2 doesn't go home empty handed, the temp is still good
为了完整性起见,有一种特殊情况,即不需要临时变量 如果要交换的两个值长度相等,且语言允许您对其使用位运算符,则可以执行以下操作:
虽然在现代计算机上,这很少实用,但了解并演示XOR操作的一个有趣方面是很好的。没有必要在第一行初始化
tmp
。不,没有;只是一个习惯。我总是用null初始化。明确性增加了代码含义的清晰性:)@Adzer:在Java中,如果没有有用的默认值,我不会初始化局部变量。通过这种方式,您可以捕获单元化的使用(编译器将警告您)。否:)仅限于他知道的一个;)我相信Python是在后台实现这一点的,但是语法糖让我们觉得我们只使用了这两个变量。但是,我想不出还有哪种语言不这样做;与AX交换字寄存器:)[s1,s2]=[s2,s1]//ECMAScript.next Sooo。。。一句话:昨天的设计模式是今天的语言功能。@purtip31:Go借用了Python的一部分,所以我想是这样的。但是我没有弄乱语言。这个问题需要的是逻辑澄清,而不是逻辑更加模糊的技术解决方案:当我进入这个论坛时,感谢编辑!尽量不要把它看作一个论坛。答案的顺序将随投票而改变。
A = A bitwise xor B
B = A bitwise xor B
A = A bitwise xor B