[转] 有关java中两个整数的交换问题

时间:2022-03-13 14:00:16

转载申明:本文主要是用于自己学习使用,为了完善自己的只是框架,没有任何的商业目的。

原文来源:有关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中两个整数的交换问题的更多相关文章

  1. Java中最小的整数为什么是-2147483648

    Java中最小的整数为什么是-2147483648 假如只有两位来表示数字,第一位是符号位: 00:0 01:1 11:-1,这个是负数,而且是补码,取反为00,加1成为01,就是-1 10:-2,这 ...

  2. JAVA 中两种判断输入的是否是数字的方法&lowbar;&lowbar;正则化&lowbar;

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  3. Java中两个List对比的算法

    Java中两个List对比的算法:   // 测试数据 // tdcsDdt.add("Z"); // tdcsDdt.add("B"); // tdcsDdt ...

  4. 在 Java 中不使用多余变量交换两个字符串

    在 Java 中不使用多余变量交换两个字符串 public class Test { public static void main(String[] args) { String a = &quot ...

  5. Java中两个或多个byte数组合并及int类型转数组

    Java中两个或多个byte数组合并及int类型转数组 // 用list好处是可以未知多个? public static byte[] test(List<byte[]> values) ...

  6. java中两种类型变量

    Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...

  7. 【Java编程】Java中的大整数计算

    在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的Big ...

  8. java中两个值互换

    两个值互换有以下三种方式: 使用临时变量(此种方法便于理解) x = 10; y = 20; //begin int temp = x; x = y; y = temp; //end; //此时x = ...

  9. 判断java中两个对象是否相等

    java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false. 但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2 ...

随机推荐

  1. Idea反向生成JavaBean

    创建数据库

  2. EditText图文混排

    下面就具体说一下我遇到的问题,首先是EditText里面的图文混排问题,这个问题的难点就是三点: 1.怎么插图片 2.怎么保存插入的图片和文字 3.怎么解析回图片和文字 解决: 一.怎么插入图片 在这 ...

  3. githubRepository -- 使用

    1. 注册github账号; 2. 配置SSH keys; 点击setting, 配置 SSH keys Generating SSH keys 检查本地的 SSH keys: a> 在用户目录 ...

  4. HDU 4288 线段树&plus;离散化

    题意: n个操作 在[1, 100000]  的区间上add 或del数( 必不会重复添加或删除不存在的数) sum 求出整个集合中 (下标%5 == 3 位置) 的数   的和 注意数据类型要64位 ...

  5. wireshark 过滤条件汇总

    原文地址:http://blog.const.net.cn/a/9340.htm 一.针对wireshark最常用的自然是针对IP地址的过滤.其中有几种情况: (1)对源地址为192.168.0.1的 ...

  6. TensorFlow 入门之手写识别&lpar;MNIST&rpar; softmax算法

    TensorFlow 入门之手写识别(MNIST) softmax算法 MNIST flyu6 softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算 ...

  7. 使用HttpGet请求json数据

  8. 逻辑回归 vs 决策树 vs 支持向量机(II)

    原文地址: Logistic Regression vs Decision Trees vs SVM: Part II 在这篇文章,我们将讨论如何在逻辑回归.决策树和SVM之间做出最佳选择.其实 第一 ...

  9. 360浏览器对CSS的补齐

    360浏览器对很多CSS不兼容,导致了很多代码显示不正常, 常见的解决方法: 很多人在源代码加了<meta content=\"IE=edge\" http-equiv=\& ...

  10. 什么是vBlock

    Vblock产品是指一种建立系统的方式,Vblock提供的是一个集成包,是一种完整的IT基础架构,并不是一个具体的设备. 具体点就是:Vblock是一个融合了思科服务器与网络.EMC存储系统与管理软件 ...