黑马程序员技术交流社区

标题: 这个疑问你们碰到过吗? [打印本页]

作者: 雀巢咖啡    时间: 2014-4-17 23:36
标题: 这个疑问你们碰到过吗?
  1. //编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数。

  2. public class test5 {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr=new int[5];//创建一个元素个数为5的整形数组
  6.                 Scanner in=new Scanner(System.in);//输入流
  7.                 for(int i=0;i<arr.length;i++)//输入数组元素
  8.                 {
  9.                         arr[i]=in.nextInt();
  10.                 }
  11.        
  12.                 int max=Max(arr);//调用求最大值的函数
  13.                 int min=Min(arr);//调用求最小值的函数
  14.                 System.out.println(max+","+min);
  15.                
  16.         }
  17.         static int Min(int[] arr)//求最小值的函数
  18.         {
  19.                 int min=0;
  20.                 int small=arr[min];            //int small=arr[0];
  21.                 for(int i=0;i<arr.length;i++)  
  22.                 {
  23.                         if(arr[i]<small)              //if(arr[i]<small)
  24.                         {
  25.                                 min=i;                //smll=arr[i];
  26.                         }
  27.                 }
  28.                 return small;//返回最小值
  29.         }
  30.         static int Max(int[] arr)//求最大的得函数
  31.         {
  32.                 int max=0;
  33.                 int big=arr[max];                //int big=arr[0]
  34.                 for(int j=0;j<arr.length;j++)
  35.                 {
  36.                            if(arr[j]>arr[max])          //if(arr[j]>big)           
  37.                         {
  38.                                 max=j;                   //big=arr[j];
  39.                         }
  40.                 }
  41.                 return big;//返回最大值
  42.         }

  43. }
  44. 以上循环里为什么实现不了最大值,最小值的查找功能?而当我把标记处的代码改为如上的代码时却又能实现?
复制代码

作者: 月光海    时间: 2014-4-17 23:49
看我代码中的注释

  1. package io.demo;

  2. import java.util.Scanner;



  3. //编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数。

  4. public class Test5 {
  5.       public static void main(String[] args)
  6.       {
  7.               int[] arr=new int[5];//创建一个元素个数为5的整形数组
  8.               Scanner in=new Scanner(System.in);//输入流
  9.               for(int i=0;i<arr.length;i++)//输入数组元素
  10.               {
  11.                       arr[i]=in.nextInt();
  12.               }
  13.       
  14.               int max=Max(arr);//调用求最大值的函数
  15.               int min=Min(arr);//调用求最小值的函数
  16.               System.out.println(max+","+min);
  17.               
  18.       }
  19.       static int Min(int[] arr)//求最小值的函数
  20.       {
  21.               int min=0;
  22.               int small=arr[min];            //int small=arr[0];
  23.               for(int i=0;i<arr.length;i++)  
  24.               {
  25.                       if(arr[i]<small)              //if(arr[i]<small)
  26.                       {
  27.                              min=i;  //这里你只是将角标赋给了min,但是并没有把值赋给small啊
  28.                              small=arr[min];
  29.                              // small=arr[i];
  30.                       }
  31.               }
  32.               return small;//返回最小值
  33.       }
  34.       static int Max(int[] arr)//求最大的得函数
  35.       {
  36.               int max=0;
  37.               int big=arr[max];                //int big=arr[0]
  38.               for(int j=0;j<arr.length;j++)
  39.               {
  40.                          if(arr[j]>arr[max])          //if(arr[j]>big)           
  41.                       {
  42.                               max=j;  //这里你只是将角标赋给了max,但是并没有把值赋给big啊
  43.                               big=arr[max];
  44.                               //big=arr[j];
  45.                       }
  46.               }
  47.               return big;//返回最大值
  48.       }

  49. }
复制代码

作者: 左拉    时间: 2014-4-17 23:55
本帖最后由 左拉 于 2014-4-17 23:58 编辑

你的两个函数返回值都是max和min,在比较的过程中,max和min先是为0,后来不断变换,可是变来变去,max和min都是由arr[max]和arr[min]所决定的值,所以不管你的方法实际执行是否正确,返回值是数组的下标,不是数组中相应的最大最小值!
作者: igi9009    时间: 2014-4-18 00:13
你两个比较程序比较晚之后并没有重新赋值,返回一直都是arr[0],因此只需要在for循环之后重新赋值就行了,代码如下:
  1. public static void main(String[] args) {
  2.                  int[] arr=new int[5];//创建一个元素个数为5的整形数组

  3.          Scanner in=new Scanner(System.in);//输入流

  4.          for(int i=0;i<arr.length;i++)//输入数组元素

  5.          {

  6.                  arr[i]=in.nextInt();

  7.          }



  8.          int max=Max(arr);//调用求最大值的函数

  9.          int min=Min(arr);//调用求最小值的函数

  10.          System.out.println(max+","+min);

  11.          

  12. }

  13. static int Min(int[] arr)//求最小值的函数

  14. {

  15.          int min=0;

  16.          int small=arr[min];            //int small=arr[0];

  17.          for(int i=0;i<arr.length;i++)  

  18.          {

  19.                  if(arr[i]<small)              //if(arr[i]<small)

  20.                  {

  21.                          min=i;                //smll=arr[i];

  22.                  }

  23.          }
  24.           small=arr[min];//small要重新赋值才行
  25.          return small;//注意,你之前返回的small一直是arr[0],
  26.                               

  27. }

  28. static int Max(int[] arr)//求最大的得函数

  29. {

  30.          int max=0;

  31.          int big=arr[max];                //int big=arr[0]

  32.          for(int j=0;j<arr.length;j++)

  33.          {

  34.                     if(arr[j]>arr[max])          //if(arr[j]>big)           

  35.                  {

  36.                          max=j;                   //big=arr[j];

  37.                  }

  38.          }
  39.          big=arr[max];//big要重新赋值才行
  40.          return big;//注意,你之前返回的small一直是arr[0],




  41.         }
复制代码

作者: Sniper_qiu    时间: 2014-4-18 10:30
你这程序必须重新赋值才能返回,不然for循环的值返回下标,而你只是在定义big和small的时候初始化了赋值,跟返回值没关系,所以无法返回。
作者: Stevenj    时间: 2014-6-18 15:20
看看,这个题,学习下
作者: yanyoucheng520    时间: 2014-7-10 18:43
我也遇到了,不过想想查询哈资料应该就能做出来了
作者: _童金辉    时间: 2014-8-11 01:15
学习了                              
作者: 想成为黑马    时间: 2014-10-31 11:04
学习了,谢谢

作者: lgc黑马    时间: 2014-12-26 21:27
没有没有没有没有
作者: 延续梦境    时间: 2015-3-2 20:30
你这个并没有重新赋值,返回一直都是arr[0]啊?
作者: wde34    时间: 2015-3-10 09:48


作者: heima_cy    时间: 2015-8-24 20:42
感谢分享 我也遇到了




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