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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
数组内求最大早小的问题:
给定的数组是{-20,20,1,2,78},调用以下两个函数算,算出来最大值是对的,而最小值显示的是1。这是为什么呢?看了半天没看出来。跪谢了!。
static int getMax(int [] arr)
{
  int max = 0 ;
  for (int x=1;x<arr.length ;x++ )
  {
   if(arr[max]<arr[x])
    arr[max] = arr[x];
  }
  return arr[max];
}
//求数组最小值
static int getMin(int [] arr)
  {
   int min = 0 ;
   for (int x=1;x<arr.length ;x++ )
   {
    if(arr[min]>arr[x])
     arr[min]=arr[x];
   }
   return arr[min];
  }

运行结果如下:

最佳答案

查看完整内容

下次贴代码,可以使用 插入代码这个功能,发表回复上面有的。

24 个回复

倒序浏览
  1. public class Main {
  2.         // 求数组最大值
  3.         static int getMax(int[] arr) {
  4.                 int max = 0;
  5.                 for (int x = 1; x < arr.length; x++) {
  6.                         if (arr[max] < arr[x]) {
  7.                                 // 这里出现了错误,应该更换max的值,而不是arr[max]
  8.                                 // 不然你修改了arr数组,下次求最小值就会不正确
  9.                                 // arr[max] = arr[x];
  10.                                 max = x;
  11.                         }
  12.                 }
  13.                 return arr[max];
  14.         }

  15.         // 求数组最小值
  16.         static int getMin(int[] arr) {
  17.                 int min = 0;
  18.                 for (int x = 1; x < arr.length; x++) {
  19.                         if (arr[min] > arr[x]) {
  20.                                 // arr[min] = arr[x];
  21.                                 min = x;
  22.                         }
  23.                 }
  24.                 return arr[min];
  25.         }

  26.         public static void main(String[] args) {
  27.                 int[] arr = { -20, 20, 1, 2, 78 };
  28.                 System.out.println(getMax(arr));
  29.                 // 你求最大值的时候,修改了arr,所以再求最小值时,1就是最小的
  30.                 System.out.println(getMin(arr));
  31.         }
  32. }
复制代码

下次贴代码,可以使用 插入代码这个功能,发表回复上面有的。
回复 使用道具 举报
因为  min 接收的值就是min的初始值。
回复 使用道具 举报
你这写的逻辑完全不对,应该是这样的

        // 求最小值的方法
        public static int Min(int[] arr) {
                int min = arr[0];
                for (int i = 0; i < arr.length; i++) {
                        if (arr[i] < min) {
                                min = arr[i];
                        }
                }
                return min;
        }

        // 求最大值的方法
        public static int Max(int[] arr) {

                int max = arr[0];
                for (int i = 0; i < arr.length; i++) {
                        if (arr[i] > max) {
                                max = arr[i];
                        }
                }
                return max;
        }

你写的arr[max]和arr[min]都是arr[0]没啥意义,最大值对了是凑巧的
回复 使用道具 举报
Jared 发表于 2015-9-25 23:57
你这写的逻辑完全不对,应该是这样的

        // 求最小值的方法

你说的这个方法我会的, 我就是想用下角标实现。
回复 使用道具 举报
正确的做法是将最大/小值初始化为arr[0],然后将数组中的数遍历,遍历过程中和当前的最大/小值比较,如果有较大/小的值出现,就把这个值附给你的最大/小值,然后返回此最值
回复 使用道具 举报
Jared 中级黑马 2015-9-26 00:05:31
7#
边情2015 发表于 2015-9-25 23:59
你说的这个方法我会的, 我就是想用下角标实现。

    public static int Max(int[] arr) {

                int max = 0;
                for (int i = 1; i < arr.length; i++) {
                        if (arr > arr[max]) {
                                max = i;
                        }
                }
                return arr[max];
        }

这样吧
回复 使用道具 举报
Jared 中级黑马 2015-9-26 00:08:02
8#
边情2015 发表于 2015-9-25 23:59
你说的这个方法我会的, 我就是想用下角标实现。

    public static int Max(int[] arr) {

                int max = 0;
                for (int i = 0; i < arr.length; i++) {
                        if (arr > arr[max]) {
                                max = i;
                        }
                }
                return arr[max];
        }
这样,下标的话一样,就是返回值注意这么写
回复 使用道具 举报
只能输出1
因为计算机是通过补码运算的,-20的补码要比1的补码大所以由计算机运算最小值是1
回复 使用道具 举报
因为在计算机运算时-20 的补码大于1的补码,所以最小值是1.
回复 使用道具 举报
雨中的泪 发表于 2015-9-26 00:14
因为在计算机运算时-20 的补码大于1的补码,所以最小值是1.

不是的,只要是把最小值放在第一位就求不出。放在其实位置就可以。求最大值。放在哪个位置都没问题。
回复 使用道具 举报
Jared 发表于 2015-9-26 00:08
public static int Max(int[] arr) {

                int max = 0;

你确定 if(arr>aar[max])可以这样写?{:2_33:}
回复 使用道具 举报
放一段运行代结果码吧,如下:
D:\java\Day06\925>
D:\java\Day06\925>
D:\java\Day06\925>
D:\java\Day06\925>javac StaticTest.java

D:\java\Day06\925>java StaticTest
max=78
min=1

D:\java\Day06\925>
回复 使用道具 举报
两位辛苦了,先睡觉吧,晚安。如下是main函数调用代码:
public static void main(String[] args)
        {
                int [] arr={-20,20,1,2,78};
                int max = ArrayTools.getMax(arr);
                System.out.println("max="+max);
                int min = ArrayTools.getMin(arr);
                System.out.println("min="+min);
               

        }
回复 使用道具 举报
Jared 中级黑马 2015-9-26 08:23:18
15#
边情2015 发表于 2015-9-26 00:27
你确定 if(arr>aar[max])可以这样写?

if(arr>arr[max])字体有问题
回复 使用道具 举报
挣个技术分不容易啊{:3_63:}
回复 使用道具 举报
orgcheng 发表于 2015-9-26 09:18
下次贴代码,可以使用 插入代码这个功能,发表回复上面有的。

您说的这个算法,三楼也有说过。这个方法我也有在用。我想换另一种算法来实现。已经调出来了,加个缓存数组就行了。当然程序再进一步优化过后就大家说的这个比较更优了。
回复 使用道具 举报
  1. 单独运行求最小值的方法时,可以得出-20.
  2. int[] arr={-20,20,1,2,78};
  3.         Arrays.sort(arr);//数组按数字升序进行排序
  4.                 System.out.println("最小数:"+arr[0]);
  5.                 System.out.println("最大数:"+arr[arr.length-1]+"\n");   
复制代码

回复 使用道具 举报
好牛逼{:2_38:}
回复 使用道具 举报
你用简单的if语句判断测试就知道了,同样会输出的是1 所以你的代码是没有问题的,最直接的原因就是计算机在运算的时候使用补码运算的而-20的补码要大于1的,就会输出1的
int a=-20;
int b=1;
if(a>b){
System.out.println(b);
}else {
System.out.println(a);
}
你自己运行一下就会名白还是会判断 1是最小值的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马