日期:2014-05-20  浏览次数:20708 次

一个简单程序结果的疑惑
今天头有点晕,就是这个程序
public   static   void   main(String   args[]){
int[]   a   =   {0,5,4,9,8,7,3,6,1,2};

int   num   =   0;
for(int   i=0;i <a.length;i++){
for(int   j=1;j <a.length-1;j++){
if(a[i]> a[j]){
a[i]   =   a[i];
a[j]   =   a[j];
}else{
num   =   a[j];

a[j]   =   a[i];

a[i]   =   num;

}
}
}

for(int   i=0;i <a.length;i++){
System.out.print(a[i]);
}
}
为什么结果是9012345678
我想要结果是0123456789
没找到原因,大家帮看一下

------解决方案--------------------
你的程序我改成这样
for(int i=0;i <a.length;i++)
for(int j=i+1;j <a.length;j++)

出来是9876543210

就是一种排序的办法,,,你原来那个,,比较乱
------解决方案--------------------
我把你的程序改成以下这样了:

public static void main(String[] args) {
  int[] a = { 0, 5, 4, 9, 8, 7, 3, 6, 1, 2 };
  int num = 0;
  for (int i = 0; i < a.length - 1; i++) {
    for (int j = i + 1; j < a.length; j++) {
      if (a[i] > a[j]) {
        num = a[j];
        a[j] = a[i];
        a[i] = num;
      }
    }
  }
  for (int i = 0; i < a.length; i++) {
    System.out.print(a[i]);
  }
}

这是一个选择排序法,i=0 就是拿 a[0]=0 与后面的第 1 至第 9 位依次比较,当比较到的数字比当前的数字小时就交换位置,比如,当 i=1,j=2 时 a[i] 就是“5”,a[j] 就是“4”,“5”是比“4”大的,所以就交换他们的位置,就变成了 a[i] 为“4”、a[j]为“5”了,再用当前的 a[i]=4 与后面的数字再进行比较。直到全部完成。

当要逆序时,前上面的 a[i]> a[j] 改成 a[i] <a[j] 就可以了。
------解决方案--------------------
public class gg {
public static void main(String args[]){
int[] a = {0,5,4,9,8,7,3,6,1,2};

int temp = 0;
for(int i=0;i <a.length;i++){
for(int j=i+1;j <a.length;j++){
if(a[i]> a[j]){
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}

for(int i=0;i <a.length;i++){
System.out.print(a[i]);
}
}
}
很简单 这样就可以了
------解决方案--------------------
比方说你固定一个i=1然后j遍历一次0到9
然后i++等于1,j就从1遍历到9
。。。。。。。。
。。。。。
一直i=8,j从8遍历到9
------解决方案--------------------
关于双从循环问题很简单的 你在循环语句处设断点 自己跟一下就很清楚了
------解决方案--------------------
路过有分么
赚分问问题