本文为原创,如需转载,请注明作者和出处,谢谢!
在程序中实现交换两个数的功能并不复杂,但如果不使用中间变量,就需要动一下脑筋。在本文介绍了两个方法(其实原理都是一个)。其基本原理就是数的中和。也就是说,通过某种运算(二元运算)将a和b两个数变成一个数,并保存在其中一个变量中。然后再通过同样的运算符将a或b中和掉。这样实际上是利用了a或b本身作为了中间变量。
先看第一个算法。
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->static
class
Num
{
int
a;
int
b;
}
public
static
void
swap1(Numnum)
{
num.a
=
num.a
+
num.b;
num.b
=
num.a
-
num.b;
num.a
=
num.a
-
num.b;
}
上面代码通过“+”运算符将a和b的运算结果赋给了a(这时a是中间变量)。然后再计算b,这时a的值已经是(a+b)了,因此,a再减b就是原来的a。 而这时b已经是原来的a了,因此,再用运算后的a(实际上是a+b)减运算后的b(实际上是原来的a),就是原来的b了,最后将这个b赋值给a。
实际上,我们还可以使用“*”、“/”等符号来实现同样的效果,代码如下:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->public
static
void
swap2(Numnum)
{
num.a
=
num.a
*
num.b;
num.b
=
num.a
/
num.b;
num.a
=
num.a
/
num.b;
}
public
static
void
swap3(Numnum)
{
num.a
=
num.a
-
num.b;
num.b
=
num.a
+
num.b;
num.a
=
num.b
-
num.a;
}
上面代码在Java中没有什么问题(但使用“/”时,分母和分子不能为0)。就算溢出也会得到正确的结果,但有某些语言中(如C语言),可能会抛出溢出错误,不了避免这种错误。可以加判断,代码如下:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->public
static
void
swap4(Numnum)
{
//
不同符号
if
(num.a
*
num.b
<=
0
)
{
num.a
=
num.a
+
num.b;
num.b
=
num.a
-
num.b;
num.a
=
num.a
-
num.b;
}
else
{
num.a
=
num.a
-
num.b;
num.b
=
num.a
+
num.b;
num.a
=
num.b
-
num.a;
}
}
当然,我们还有更好的方法,就是使用异或运算符,我们知道,任何数与0异或后仍然为它本身,两个相同的数异或后为0。根本这种特性,可以有如下代码。
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->public
static
void
swap5(Numnum)
{
num.a
=
num.a
^
num.b;
num.b
=
num.a
^
num.b;
num.a
=
num.a
^
num.b;
}
《Android/OPhone开发完全讲义》(本书版权已输出到台湾)
样章和目录下载
互动网
当当网
卓越亚马逊
《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》
样章下载
互动网
乐博Android手机客户端(新浪微博)
发布
分享到:
相关推荐
在编程中,交换两个数值是常见的操作,但不使用中间变量进行交换可能需要一些巧妙的技巧。本文将探讨如何在Java中实现这一目标,主要基于数的中和原理,即通过特定的运算使得两个数相互抵消,从而达到交换的目的。 ...
在Java中,我们可以使用异或(^)操作符来交换两个变量的值,因为异或两次相同的数等于零。具体步骤如下: ```java int x = 10; int y = 20; x = x ^ y; // 对x和y进行异或运算,得到它们的异或结果并赋给x y ...
在第二章实验一中,我们看到一个关于变量交换的程序,要求不使用中间变量来交换两个变量的值。该程序使用了Java的基本数据类型和算术运算符来实现变量的交换。 该程序展示了Java中如何使用基本数据类型和算术运算符...
在Java编程语言中,交换两个数据是常见的操作,无论是在数组排序、列表操作还是其他算法中都可能遇到。本文将详细讲解两种交换两个数据的方法,并通过实例进行解析。 方法一:利用数组 数组是最基础的数据结构,...
6. **变量交换**:不使用第三个变量交换两个整数i和j的值。Java提供了异或操作符`^`,可以用来交换两个数的值,因为`(a ^ b) ^ b = a`。 7. **兔子问题**:根据斐波那契数列计算兔子的数量。这是一个典型的动态规划...
在解决拼图的过程中,会涉及到数组元素的交换,比如使用`temp`作为中间变量进行两个相邻元素的互换。此外,可能还会用到数组的遍历,检查当前拼图是否达到目标状态。 ### 6. 状态判断与算法 解决滑动拼图通常涉及一...
- Java 5及以上版本提供了`Integer`包装类,可以使用`compareTo()`或`exchange()`方法(Java 8引入)来交换两个`Integer`对象的值。 2. **引用类型交换**: - 引用交换相对简单,只需将两个引用互相赋值即可,...
- **实现思路**:直接使用条件语句比较两个数,确定最大值和最小值后输出。 #### 7. 字符串读取统计 - **题目解析**:读取一串英文字符,统计其中的英文字母和空格数量。 - **实现思路**:使用while循环,每次读取...
8. **变量交换**:在Java中,交换两个变量的值通常需要一个临时变量,如题目中的`tmp`。执行代码后,`m`和`n`的值变为`160/50`。 9. **算术运算优先级**:整数除法会舍去小数部分,所以`29/3*3`的值是27,不考虑...
它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 ```java public void BubbleSort(int[] L) { ...
在Java中,交换两个变量的值通常是通过中间变量或位运算实现的。不使用额外变量的交换方法是通过异或操作:`a = a ^ b; b = a ^ b; a = a ^ b;` 谜题8:Dos Equis 这个谜题可能与字符串操作有关,例如拼接、查找、...
3. 不使用中间变量交换两个变量的值: 在这个例子中,通过一次乘法和两次除法实现了a和b的值互换。这种方法利用了算术运算的性质,避免了使用额外的中间变量。首先,a乘以b得到新的值并赋给a,然后用这个结果除以b...
1. 从列表的第一个元素开始,比较相邻的两个元素。 2. 如果第一个元素大于第二个元素,则交换它们的位置。 3. 重复步骤 1 和 2,直到列表的末尾,此时最大的元素将位于正确的位置。 4. 除了最后一个元素,对剩余的...
Java基础是学习任何Java应用开发的基石,涵盖了变量、数据类型、控制结构、类与对象、数组、异常处理、输入/输出(I/O)等多个核心概念。在这个“Java基础独家版”中,我们可以看到几个关键的Java编程知识点: 1. *...
在Java中,交换两个变量的值是常见的操作,但直接使用`=`会导致问题,如以下错误代码所示: ```java int num1 = 10; int num2 = 20; num1 = num2; // 此时num1 = 20, num2 = 20 num2 = num1; // num2仍然为20,两个...
- 交换两端的元素,然后逐步向中间移动指针。 - 直到两个指针相遇或交错,完成数组的逆序操作。 #### 程序28: 提取整数的指定位 - **目标**: 提取一个整数从右端开始的4~7位。 - **程序分析**: - 首先使整数...
在交换两个变量的值时,通常有两种方法:一是使用中间变量,二是利用算术运算,例如加法、减法或异或。例如,交换两个整数`n`和`m`的值可以使用异或操作:`n = n ^ m; m = n ^ m; n = n ^ m;`。这种方法避免了使用...