java数组排序的问题

使用目前的代码结果里会出现0,使用注释的代码块进行替换就没有问题,谁能说说是为什么?

import javax.swing.JOptionPane;
import java.util.*;

public class TempTest{
int[] getArray(){
int intTimes = Integer.decode(JOptionPane.showInputDialog("输入随即数组的大小:"));
Random r = new Random();
int[] a = new int[intTimes];
for(int i=0;i<intTimes;i++){
a[i] = r.nextInt(1000);
}
return a;
}
void sort(int[] a){
int minlocate,temp;
for(int i=0;i<a.length;i++){
minlocate = i;
for(int j=i;j<a.length;j++){
if(a[minlocate]>a[j]){
minlocate = j;
}
}
a[minlocate] = a[minlocate] + a[i];
a[i] = a[minlocate] - a[i];
a[minlocate] = a[minlocate] - a[i];
/*temp = a[minlocate];
a[minlocate] = a[i];
a[i] = temp;*/
}
}
public static void main(String[] s){
TempTest t = new TempTest();
int[] a = t.getArray();
t.print(a);
t.sort(a);
t.print(a);
}
void print(int[] a){
for(int i:a){
System.out.println(i);
}
System.out.println();
}
}

请注意当minlocate和i相等时
x = x + y;
y = x - y;
x = x - y;
就变成了
x = x + x;
x = x - x;//等于零
x = x - x;//等于零
//零就是这么诞生地
//应该加入判断,当当minlocate和i相等时,就不交换。如

import javax.swing.JOptionPane;
import java.util.*;

public class TempTest {
int[] getArray() {
int intTimes = Integer
.decode(JOptionPane.showInputDialog("输入随即数组的大小:"));
Random r = new Random();
int[] a = new int[intTimes];
for (int i = 0; i < intTimes; i++) {
a[i] = r.nextInt(1000);
}
return a;
}

void sort(int[] a) {
int minlocate, temp;
for (int i = 0; i < a.length; i++) {
minlocate = i;
for (int j = i; j < a.length; j++) {
if (a[minlocate] > a[j]) {
minlocate = j;
}
}
if (minlocate != i) {
a[minlocate] = a[minlocate] + a[i];
a[i] = a[minlocate] - a[i];
a[minlocate] = a[minlocate] - a[i];
}
/*
* temp = a[minlocate]; a[minlocate] = a[i]; a[i] = temp;
*/
}
}

public static void main(String[] s) {
TempTest t = new TempTest();
int[] a = t.getArray();
t.print(a);
t.sort(a);
t.print(a);
}

void print(int[] a) {
for (int i : a) {
System.out.println(i);
}
System.out.println();
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜