[转] 有关java中两个整数的交换问题
转载申明:本文主要是用于自己学习使用,为了完善自己的只是框架,没有任何的商业目的。
原文来源:有关Java中两个整数的交换问题
如果侵权,麻烦告之,立刻删除。
在程序开发的过程,要交换两个变量的内容,是一种比较常见的事情。在排序算法中,就有一种就叫做“交换排序法”。在所有的排序算法,交换要排序的集合中的两个元素,几乎是必须的过程。在Java中交换两个元素的内容,如果你是程序员新手,你可能碰到意想不到的问题。
众所周知,java和C、C++中都不能通过值传递的方式实现两个整数的交换。
即下面的函数是不能成功交换两个整数的,
1 public void swap1(int a,int b){ //值参数传递不能实现交换两个整数
2 int t;
3 t = a;
4 a = b;
5 b = t;
6 }
在C++,可以通过引用或者指针来实现两个整数的交换,实质上是通过地址传递来实现两个整数的交换的。
void swap2(int &a,int &b) //引用传递
{
int temp;
temp = a;
a = b;
b = temp;
}
还可以通过指针来实现两个整数的交换
1 void swap2(int *a,int *b)//指针,地址传递
2 {
3 int temp;
4 temp = *a;
5 *a = *b;
6 * b = temp;
7 }
那么java中又是如何实现两个整数的交换呢?
方法1:
通过数组方式交换:
如果一定要通过一个 method 来实现,下面的形式也许可以:
1 void swap(int[] a) {
2 if (a == null || a.length != 2)
3 throw new IllegalArgumentException();
4 int temp = a[0];
5 a[0] = a[1];
6 a[1] = temp;
7 }
代码实例如下:
//实现个整数的交换 public class SwapInteger {
public static void swap(int a[]){
//数组传递实现交换两个整数
int t;
t = a[0];
a[0] = a[1];
a[1] = t; }
public static void main(String args[]){ int []a = new int[2];
a[0] = 3;
a[1] = 4;
swap(a);
System.out.println(a[0] + "/t" + a[1]);
}
}
2)方法2:
构造对象,将a,b作为对象的属性,然后操作对象,最后获得对应的属性。
有人说可以用Integer类来实现,这是错误的说法。
理由如下:
Integer不行,
1、Integer本身是值对象(value object),不能修改它的内容(找找哪个方法能修改它的内容?)。实际上,串对象String都不能改变;
2、就算Integer本身可以修改,自动装箱、拆箱也不灵:
void exchange( Integer ao, Integer bo ) { 交换ao和bo中的实际数据 }
int a, b;
exchange( a, b ); // 自动装箱机制生成了两个临时对象,不过调用返回时不能传回a和b。
最多只能这样:
Integer ao=a;
Integer bo=b;
exchange( ao, bo );
a = ao;
b = bo;
例题:交换JAVA数组中两数
该代码实现功能:
1.接受用户输入10个整数,并存入Array
2.将Array中的最大值与最小值交换位置
java程序如下:
1 import java.util.Scanner;
2 public class SwapNumber {
3 public static void main(String[] ar) {
4
5 Scanner input = new Scanner(System.in);
6
7 int maxIndex = 0; //标记最大值索引
8 int minIndex = 0; //标记最小值索引
9 int numbers[] = new int[10]; //声明数组接受用户输入
10 System.out.println("请输入十个数字:");
11 //循环接收
12 for (int i = 0; i < numbers.length; i++) {
13 numbers[i] = input.nextInt();
14 }
15 int temp = 0; //临时变量
16 int max = numbers[0]; //标记最大值
17 int min = numbers[0]; //标记最小值
18 //查找最大,最小索引
19 for (int i = 1; i < numbers.length; i++) {
20 if (numbers[i] > max) {
21 max = numbers[i]; //一定要将该值赋给max!!!!!
22 maxIndex = i;
23 }
24 if (numbers[i] < min) {
25 min = numbers[i];
26 minIndex = i;
27 }
28 }
29 //输出排序后效果
30 for (int a : numbers) {
31 System.out.print(a + "/t");
32 }
33 //进行交换操作
34 temp = numbers[maxIndex];
35 numbers[maxIndex] = numbers[minIndex];
36 numbers[minIndex] = temp;
37
38 //输出排序后效果
39 System.out.println("排序后,输出:");
40 for (int i = 0; i < numbers.length; i++) {
41 System.out.print(numbers[i] + "/t");
42 }
43 }
44 }
[转] 有关java中两个整数的交换问题的更多相关文章
- Java中最小的整数为什么是-2147483648
Java中最小的整数为什么是-2147483648 假如只有两位来表示数字,第一位是符号位: 00:0 01:1 11:-1,这个是负数,而且是补码,取反为00,加1成为01,就是-1 10:-2,这 ...
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- Java中两个List对比的算法
Java中两个List对比的算法: // 测试数据 // tdcsDdt.add("Z"); // tdcsDdt.add("B"); // tdcsDdt ...
- 在 Java 中不使用多余变量交换两个字符串
在 Java 中不使用多余变量交换两个字符串 public class Test { public static void main(String[] args) { String a = " ...
- Java中两个或多个byte数组合并及int类型转数组
Java中两个或多个byte数组合并及int类型转数组 // 用list好处是可以未知多个? public static byte[] test(List<byte[]> values) ...
- java中两种类型变量
Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...
- 【Java编程】Java中的大整数计算
在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的Big ...
- java中两个值互换
两个值互换有以下三种方式: 使用临时变量(此种方法便于理解) x = 10; y = 20; //begin int temp = x; x = y; y = temp; //end; //此时x = ...
- 判断java中两个对象是否相等
java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false. 但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2 ...
随机推荐
- JAVA常用单词
柠檬学院Java 基础常见英语词汇(共 70 个)OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程JDK:Java d ...
- 我所理解的js闭包
举个例子: function f1(){ var n=; function f2(){ alert(n); } } 上面代码中,f2()可以读取f1()中的局部变量n的值,但是f1()不能反过来读取f ...
- hdu 4628 Pieces 状态压缩dp
Pieces Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- 使用SSH连接LINUX的命令
查看端口号是否被占用 netstat -tunlp|grep 端口号 杀掉 kill-9 pid 后台运行 nohup 应用程序名 & disown -a && exit 屏幕 ...
- Angularjs ngTable使用备忘
项目中用到angularjs的表格ng-table,功能相当强大,像搜索.排序.checkbox.分页.每页表格显示数目等都有.API,demo什么的也只能参考官网了.这里做个备忘,哪天肯定还会用到. ...
- bzoj2119 股市的预测
传送门 感觉智商莫名其妙的就变低了……写这题的时候死活想不出来…… 做法其实不难…… 题目要求形如ABA的串的个数,我们可以枚举A的长度,利用标记关键点的方法统计答案.设枚举到的答案为k,每k个点标记 ...
- 【Leetcode】【Medium】Path Sum II
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- 【源码分析】cocostudio场景编辑器的触发器逻辑
去看场景编辑器的差不多都可以看到有模拟器的设置(菜单栏的设置).默认是选择cocostudio安装路径中的Simulator.exe这个模拟器,看官网介绍是自己可以选择模拟器,而且公开源代码可以按需设 ...
- vue-cli中自定义路径别名 assets和static文件夹的区别
转自:vue-cli中自定义路径别名 assets和static文件夹的区别 静态资源处理: assets和static文件夹的区别 相信有很多人知道vue-cli有两个放置静态资源的地方,分别是sr ...
- hexo安装-nodejs
npm- 安装淘宝源 http://npm.taobao.org/$ npm install -g cnpm --registry=https://registry.npm.taobao.org- 查 ...