转载申明:本文主要是用于自己学习使用,为了完善自己的只是框架,没有任何的商业目的。
原文来源:有关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 ...
随机推荐
-
Idea反向生成JavaBean
创建数据库
-
EditText图文混排
下面就具体说一下我遇到的问题,首先是EditText里面的图文混排问题,这个问题的难点就是三点: 1.怎么插图片 2.怎么保存插入的图片和文字 3.怎么解析回图片和文字 解决: 一.怎么插入图片 在这 ...
-
githubRepository -- 使用
1. 注册github账号; 2. 配置SSH keys; 点击setting, 配置 SSH keys Generating SSH keys 检查本地的 SSH keys: a> 在用户目录 ...
-
HDU 4288 线段树+离散化
题意: n个操作 在[1, 100000] 的区间上add 或del数( 必不会重复添加或删除不存在的数) sum 求出整个集合中 (下标%5 == 3 位置) 的数 的和 注意数据类型要64位 ...
-
wireshark 过滤条件汇总
原文地址:http://blog.const.net.cn/a/9340.htm 一.针对wireshark最常用的自然是针对IP地址的过滤.其中有几种情况: (1)对源地址为192.168.0.1的 ...
-
TensorFlow 入门之手写识别(MNIST) softmax算法
TensorFlow 入门之手写识别(MNIST) softmax算法 MNIST flyu6 softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算 ...
- 使用HttpGet请求json数据
-
逻辑回归 vs 决策树 vs 支持向量机(II)
原文地址: Logistic Regression vs Decision Trees vs SVM: Part II 在这篇文章,我们将讨论如何在逻辑回归.决策树和SVM之间做出最佳选择.其实 第一 ...
-
360浏览器对CSS的补齐
360浏览器对很多CSS不兼容,导致了很多代码显示不正常, 常见的解决方法: 很多人在源代码加了<meta content=\"IE=edge\" http-equiv=\& ...
-
什么是vBlock
Vblock产品是指一种建立系统的方式,Vblock提供的是一个集成包,是一种完整的IT基础架构,并不是一个具体的设备. 具体点就是:Vblock是一个融合了思科服务器与网络.EMC存储系统与管理软件 ...