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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 邓斌 于 2012-4-9 21:16 编辑

这段代码输出结果

[7,5,2,3,7,6]
[2,3,5,6,7,7]

就因为前面多调用了一个最大数的方法。
吧1变成了最大值。
而如果把 int[]arr={1,5,2,3,7,6};改成int[]arr={8,5,2,3,7,6};   1改成其他一些数都没问题。没被替换。
  1. class Zda
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[]arr={1,5,2,3,7,6};

  6.                 max(arr);
  7.                
  8.                 print(arr);
  9.                 paixu(arr);
  10.                 print(arr);

  11.         }
  12.         public static int max(int[] arr)
  13.         {
  14.                 int sum=0;
  15.                 for (int x=1;x<arr.length ;x++ )
  16.                 {
  17.                         if (arr[sum]<arr[x])
  18.                         {
  19.                                 arr[sum]=arr[x];
  20.                         }
  21.                        

  22.                 }
  23.                
  24.                         return arr[sum];
  25.         }

  26.         public static void paixu(int[]arr)
  27.                 {
  28.                         for (int x=0;x<arr.length-1 ;x++ )
  29.                         {
  30.                                 for (int y=x+1;y<arr.length ;y++ )
  31.                                 {
  32.                                         if(arr[x]>arr[y])
  33.                                         {
  34.                                                 int temp=arr[x];
  35.                                                 arr[x]=arr[y];
  36.                                                 arr[y]=temp;

  37.                                        
  38.                                        
  39.                                         }
  40.                                 }
  41.                         }
  42.                
  43.                
  44.                 }
  45.         public static void print(int[] arr)
  46.                 {
  47.                         System.out.print("[");
  48.                         for (int x=0;x<arr.length ;x++ )
  49.                         {
  50.                                 if (x!=arr.length-1)
  51.                                 {
  52.                                         System.out.print(arr[x]+",");
  53.                                 }
  54.                                 else
  55.                                         System.out.println(arr[x]+"]");
  56.                                
  57.                         }
  58.                        
  59.                        
  60.        
  61.                 }
  62.        
  63.        
  64.         }
复制代码
了解了。。求最值。这样定义把角标为0的元素赋为最大值了。有BUG。
谢谢楼下的朋友。不回复了。

3 个回复

倒序浏览
因为你第27行return arr[sum];返回的是该数组的最大值,
int[]arr={1,5,2,3,7,6};调用该方法后你的数组变成了{7,5,2,3,7,6}
改成int[]arr={8,5,2,3,7,6};   因为8是最大值,返回后数组不变,不会有问题。
如果你运行结果是想得出最大值和排序数组
求最值需要改下
public static int max(int[] arr)
        {
                int sum = arr[0];

                for(int x=1; x<arr.length; x++)
                {
                        if(sum<arr[x])
                                sum = arr[x];
                }
                return sum;
        }
回复 使用道具 举报
public static int max(int[] arr)
        {
                int sum=0;
                for (int x=1;x<arr.length ;x++ )
                {
                        if (arr[sum]<arr[x])
                        {
                                arr[sum]=arr[x];//这里把数组元素arr[arr]赋成了arr[x]的值,按你的要求,这里应该保存最大值在数组中的角标:sum=arr
                        }                       
                }               
                        return arr[sum];
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马