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

原文来源:有关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 中两种判断输入的是否是数字的方法__正则化_

    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 = " ...

  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. Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Unable to load the mojo 'resources' (or one of its required components)

    1.异常提示: Description Resource Path Location Type Execution default-resources of goal org.apache.maven ...

  2. webapi下载文件

    [HttpGet] public IHttpActionResult ExportData() { ... var dt = ExcelHelper.ListToDataTable(list); va ...

  3. Python-正则表达式实现计算器功能

    需求: 用户输入运算表达式,终端显示计算结果 源代码: # !/usr/bin/env/ python3 # -*- coding: utf-8 -*- """用户输入计 ...

  4. 十四、css动画基础知识

    引用动画的方式:   1.轻量动画: cubic-bezier(0.165, 0.840, 0.440, 1.000);//加上贝塞尔曲线使动画运动起来更加平滑 2..scrollNews,.m-tr ...

  5. eclipse 出现 jar包找不到 问题记录

    同事在下载maven私服项目的时候,自动更新失败.maven 一直提示 parent 更新失败但是其他的项目都是正常的,这就奇怪了. 最后 仔细查询后,发现是  同事在下载项目时候,项目是分clien ...

  6. SpringMVC学习(三)——基于注解配置的springMVC项目

    可运行的附件地址:http://files.cnblogs.com/files/douJiangYouTiao888/springWithAnnotation.zip 项目说明: 作者环境:maven ...

  7. Angular2 前端代码规范

    不要重置对象的引用!(重置只应该在组件或服务的初始化时) why:会使页面产生闪烁 不要给图片绑定一个空的值或空的图片引用(如果值从服务器异步过来,那应该在初始化时给它一个默认值)why:会触发一个4 ...

  8. Hadoop学习---Hadoop的HBase的学习

    Hbase Hbase的特点: Hbase是bigtable的开源的仿制版本 建立在HDFS之上 可靠性,靠性能 大:一个表可以有上亿行,上百万列 面向列:面向列(族)的存储和权限控制,列(族)独立检 ...

  9. 设计模式:组合(Composite)模式

    设计模式:组合(Composite)模式 一.前言   关于Composite模式,其实就是组合模式,又叫部分整体模式,这个模式在我们的生活中也经常使用,比如说如果读者有使用Java的GUI编写过程序 ...

  10. July 04th 2017 Week 27th Tuesday

    Nothing is really beautiful but truth. 只有真理才是真美. Truth can be beautiful, but it also can be cruel. W ...