黑马程序员技术交流社区

标题: 数组中最大最小值,为何最小值显示不正确 [打印本页]

作者: BlueWing    时间: 2015-9-4 10:29
标题: 数组中最大最小值,为何最小值显示不正确
本帖最后由 BlueWing 于 2015-9-4 11:05 编辑
  1. class ArrayMaxMinBlue
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = new int[]{1,5,243,23,2424,241,111,231111};
  6.                 arrmax(arr);
  7.                 arrmin(arr);
  8.         }
  9.         
  10.         public static void arrmax(int[] arr)
  11.         {
  12.                 for(int x=0;x<arr.length;x++)
  13.                 {
  14.                         if(arr[0]<arr[x])
  15.                                 arr[0]=arr[x];
  16.                 }
  17.                 System.out.println("ArrayMax="+arr[0]);
  18.         }
  19.         public static void arrmin(int[] arr)
  20.         {
  21.                 for(int x=0;x<arr.length;x++)
  22.                 {
  23.                         if(arr[0]>arr[x])
  24.                                 arr[0]=arr[x];
  25.                 }
  26.                 System.out.println("ArrayMin="+arr[0]);
  27.         }
  28. }
复制代码

如上代码,为何最小值打印出来为5?
作者: ln0491    时间: 2015-9-4 10:37
这样比较对吗?不加个临时变量来交换,这样都覆盖了
作者: BlueWing    时间: 2015-9-4 10:41
ln0491 发表于 2015-9-4 10:37
这样比较对吗?不加个临时变量来交换,这样都覆盖了

懂了 谢谢哈
比较最大值的时候arr[0]已经变了 数组中已经没有1了
作者: 洋葱头头    时间: 2015-9-4 10:42
因为你没有1了 你把arrmax(arr);注释掉你就懂了
作者: BlueWing    时间: 2015-9-4 10:56
洋葱头头 发表于 2015-9-4 10:42
因为你没有1了 你把arrmax(arr);注释掉你就懂了

嗯 是啊 刚接触写代码 有很多东西注意不到  修改了程序 特意加了数组的显示
  1. class ArrayMaxMinBlue
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = new int[]{1,5,243,23,2424,241,111,231111};
  6.                 arrmax(arr);
  7.                 printarr(arr);
  8.                 arrmin(arr);
  9.                 printarr(arr);
  10.         }
  11.        
  12.         public static void arrmax(int[] arr)
  13.         {
  14.                 int max=0;
  15.                 for(int x=0;x<arr.length;x++)
  16.                 {
  17.                         if(max<arr[x])
  18.                                 max=arr[x];
  19.                 }
  20.                 System.out.println("ArrayMax="+max);
  21.         }
  22.        
  23.         public static void arrmin(int[] arr)
  24.         {
  25.                 int min=0;
  26.                 for(int x=0;x<arr.length;x++)
  27.                 {
  28.                         if(min>arr[x])
  29.                                 min=arr[x];
  30.                 }
  31.                 System.out.println("ArrayMin="+min);
  32.         }
  33.        
  34.         public static void printarr(int[] arr)
  35.         {
  36.                 System.out.print("{");
  37.                 for(int x=0;x<arr.length;x++)
  38.                 {
  39.                         if(x!=arr.length-1)
  40.                                 System.out.print(arr[x]+", ");
  41.                         else
  42.                                 System.out.println("}");
  43.                 }
  44.         }
  45. }
复制代码

作者: BlueWing    时间: 2015-9-4 10:58
本帖最后由 BlueWing 于 2015-9-4 11:06 编辑
BlueWing 发表于 2015-9-4 10:56
嗯 是啊 刚接触写代码 有很多东西注意不到  修改了程序 特意加了数组的显示
...


作者: 18664300701    时间: 2015-9-4 11:12
你不该大小都用arr[0]来表示
作者: yuzhouyichen    时间: 2015-9-4 11:18
本帖最后由 yuzhouyichen 于 2015-9-4 11:23 编辑

打印程序老师为什么不这么写?
C:\Users\Administrator\Desktop

作者: BlueWing    时间: 2015-9-4 11:24
本帖最后由 BlueWing 于 2015-9-4 11:25 编辑
yuzhouyichen 发表于 2015-9-4 11:18
打印程序老师为什么不这么写?

那你的第8行 就报错了 x是for循环的内部变量
我的打印数组的函数写的也有问题,正确的加大括号的应该这么写
  1.         public static void printarr(int[] arr)
  2.         {
  3.                 System.out.print("{");
  4.                 for(in  t x=0;x<arr.length;x++)
  5.                 {
  6.                         if(x!=arr.length-1)
  7.                                 System.out.print(arr[x]+", ");
  8.                         else
  9.                                 System.out.println(arr[x]+"}");
  10.                 }
  11.         }
复制代码


作者: yuzhouyichen    时间: 2015-9-4 11:35
BlueWing 发表于 2015-9-4 11:24
那你的第8行 就报错了 x是for循环的内部变量
我的打印数组的函数写的也有问题,正确的加大括号的应该这么 ...

哦  我打错了,应该把第八行arr[x]去掉  这样也可以吧?
作者: BlueWing    时间: 2015-9-4 11:37
本帖最后由 BlueWing 于 2015-9-4 11:39 编辑
yuzhouyichen 发表于 2015-9-4 11:35
哦  我打错了,应该把第八行arr[x]去掉  这样也可以吧?

可以。
但是 你的数组 打印出来会是 {3,6,123,1,}这样子 最后多一个逗号
而且 如果有多行打印,这个函数打印以后是不做换行的。

作者: yuzhouyichen    时间: 2015-9-4 11:45
BlueWing 发表于 2015-9-4 11:37
可以。
但是 你的数组 打印出来会是 {3,6,123,1,}这样子 最后多一个逗号
而且 如果有多行打印,这个 ...

哦  多个逗点确实是个问题,不过你说的换行也可以解决
public static void printarr(int[] arr)
        {
                        System.out.print("{");
                        for(int x=0;x<arr.length;x++)
                        {                       
                                System.out.print(arr[x]+", ");
                        }
                        System.out.print(arr[x]+"} ");     
                        System.out.println();
                }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2