声明: 那个k = 0;是我故意改的.我想知道当我写k = 0的输出结果.
运行时我输入的数字是:3 8 5 1 9 2 7 4 6
但输出的结果却是:8 5 3 9 2 7 4 6 1 为什么呢?第一个数不应该是1吗? 8怎么来的?
public class Text {
public static void main(String []args) {
int[] a = new int[args.length]; for (int i=0; i<a.length; i++) {
a[i] = Integer.parseInt(args[i]);
}
print(a);
minToMax(a);
print(a);
} private static void minToMax(int[] a) {
int k,temp; for (int i=0; i<a.length; i++) {
k = 0; for (int j=k+1; j<a.length; j++) {
if (a[j] < a[k]) {
k = j;
}
} if (k != i) {
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
} private static void print(int[] a) {
for (int i=0; i<a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}
运行时我输入的数字是:3 8 5 1 9 2 7 4 6
但输出的结果却是:8 5 3 9 2 7 4 6 1 为什么呢?第一个数不应该是1吗? 8怎么来的?
public class Text {
public static void main(String []args) {
int[] a = new int[args.length]; for (int i=0; i<a.length; i++) {
a[i] = Integer.parseInt(args[i]);
}
print(a);
minToMax(a);
print(a);
} private static void minToMax(int[] a) {
int k,temp; for (int i=0; i<a.length; i++) {
k = 0; for (int j=k+1; j<a.length; j++) {
if (a[j] < a[k]) {
k = j;
}
} if (k != i) {
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
} private static void print(int[] a) {
for (int i=0; i<a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}
但是i=1 != k=0 又满足第二个if语句。所以把1换成了8。楼主仔细看看应该就知道错误所在了!
我帮你改了下
private static void minToMax(int[] a) {
int k,temp; for (int i=0; i<a.length; i++) {
k = i;
for (int j=k+1; j<a.length; j++) {
if (a[j] < a[k]) {
k = j;
}
}
if (k != i) {
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
1 8 5 3 9 2 7 4 6
第二次:
8 1 5 3 9 2 7 4 6
第三次:
8 5 1 3 9 2 7 4 6
一次类推....注意:每次外层循环 i 是在递增的,一次外层循环只不过是判断i的值是不是最小数1 的位置而已,是就交换,不是就不交换