A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© demown 中级黑马   /  2014-4-17 17:33  /  1489 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 demown 于 2014-4-17 18:38 编辑

你们看看这段代码 的打印结果吧。
public class ChaBiao {
public static void main(String[] ages){
  int[] arr={12,23,3,5,4,9,6,7,8};
  for(int x=0;x<arr.length;x++){
   System.out.print(arr[x]+",");
  }
  sum(arr);
  sop(arr);
  //for(int x=0;x<arr.length;x++){
   //System.out.print(arr[x]+",");
  //}
}

public static void sop(int[] arr){
for(int x=0;x<arr.length-1;x++){
   System.out.print(arr[x]);
   }}

public static void sum(int[] arr){
  int cishu=0;
  for(int x=0;x<arr.length-1;x++){
   for(int y=x+1;y<arr.length;y++){
    if(arr[x]>arr[y]){
     int temp=arr[x];
     arr[x]=arr[y];
     temp=arr[x];
    }
  }
}System.out.print("cishu="+cishu+";");


}}
上面是没有把x和y换位置 所以打印出来的是
12,23,3,5,4,9,6,7,8,cishu=0;3,3,3,4,4,6,6,7,8,
我知道是因为没有交换位置 但是为啥能打印出来这个结果我知道拿错了 是想让你们解释一下怎么得到的找个结果分析一下

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
  1. public static void sop(int[] arr){
  2. for(int x=0;x<arr.length;x++){  //这里x < arr.length - 1会导致少打印一个数组元素问题
  3.    System.out.println(arr[x]);
  4.    }}

  5. public static void sum(int[] arr){
  6.   int cishu=0;
  7.   for(int x=0;x<arr.length-1;x++){
  8.    for(int y=x+1;y<arr.length;y++){
  9.     if(arr[x]>arr[y]){
  10.      int temp=arr[x];
  11.      arr[x]=arr[y];
  12.      arr[y]=temp; //temp = arr[x]错了。arr[y]没有将arr[x]的值接收过来,也就是说凡是比arr[y]大的arr[x]值都被替换为arr[y]了。
  13.     }
  14.   }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
public static void bubble_sort(int arr[])
        {
                for(int i=0;i<arr.length-1;i++){
                        for(int j=0;j<arr.length-1;j++){
                                if(arr[j]>arr[j+1]){
                                        int t=arr[j];
                                        arr [j]=arr[j+1];
                                        arr[j+1]=t;
                                        }
                                }
                        }  最后 你要把 你程序的   temp=arr[x];  改成  arr[y]=temp,  你没有交换成功
回复 使用道具 举报
帮你做了一些修改,数组换位那里出了点问题,下面的程序就没问题了
  1. public static void main(String[] ages){
  2.                   int[] arr={12,23,3,5,4,9,6,7,8};
  3.                   for(int x=0;x<arr.length;x++){
  4.                    System.out.print(arr[x]+",");
  5.                   
  6.                   }
  7.                   System.out.println();   //这里加多一个换行好看点
  8.                   sum(arr);
  9.                   sop(arr);
  10.                   
  11.                 }

  12.                 public static void sop(int[] arr){
  13.                 for(int x=0;x<arr.length;x++){
  14.                    System.out.print(arr[x]+",");
  15.                    }}

  16.                 public static void sum(int[] arr){
  17.                   int cishu=0;
  18.                   for(int x=0;x<arr.length-1;x++){
  19.                    for(int y=x+1;y<arr.length;y++){
  20.                     if(arr[x]>arr[y]){
  21.                      int temp=arr[x];
  22.                      arr[x]=arr[y];
  23.                      arr[y]=temp;    //这里要这样写才能成功换位置成功
  24.                      cishu++;     //这里每次换位置就加一
  25.                     }
  26.                   }
  27.                 }
  28.                   System.out.println("cishu="+cishu+";");   //这里加换行
  29.                

  30.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
if(arr[x]>arr[y]){
      int temp=arr[x];
      arr[x]=arr[y];
      temp=arr[x];//这里出了问题,上面已经将arr[ y ]的值给了arr[ x ],而arr[ y ]的值是没有得到交换的
                             //应该改成 arr[ y ]  = temp;
     }
回复 使用道具 举报
  1. public class ChaBiao {
  2. public static void main(String[] ages){
  3.   int[] arr={12,23,3,5,4,9,6,7,8};
  4.   for(int x=0;x<arr.length;x++)
  5.   {
  6.          System.out.print(arr[x]+",");
  7.   }
  8.   sum(arr);
  9.   sop(arr);
  10.   
  11. }

  12. public static void sop(int[] arr){
  13. for(int x=0;x<arr.length-1;x++)
  14.         {
  15.                 System.out.print(arr[x]);
  16.     }
  17. }

  18. public static void sum(int[] arr)
  19. {
  20.         int cishu=0;
  21.     for(int x=0;x<arr.length-1;x++)
  22.    {
  23.                 for(int y=x+1;y<arr.length;y++){
  24.                 if(arr[x]>arr[y]){
  25.                 int temp=arr[x];
  26.             arr[x]=arr[y];
  27.                 arr[y]=temp;// 注意:temp=arr[x]; 这样写的话是起不到调换位置的作用的
  28.                 cishu++;//当数组中的数据发生了交换,则cishu+1,所以cishu的值会变化。
  29.     }
  30.   }
  31. }
  32. System.out.print("cishu="+cishu+";");

  33. //还有,你的大括号的书写很不规范,这样会让阅读者感觉很吃力。
  34. }
  35. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马