【问题标题】:Java array min and max issueJava数组最小值和最大值问题
【发布时间】:2013-12-06 03:55:22
【问题描述】:
package array;
import java.util.*;
public class Array {

public static void main(String[] args) {
     int [] a = new int [10];
     Random number = new Random ();
     int x;
      int min, max ;
      min = max = a[0];

for (int b = 0; b<a.length; b++)
   {
       x = number.nextInt (100);
      // System.out.println (x); just for testing x

      a [b]= x;
       System.out.println (a[b]);

       if (a[b] < min) min = a[b];
       if (a[b] > max) max = a[b];
   }

 System.out.println ("Min is: " + min + " " + "Max is: "+ max );
}
}

当我设置min = a[0];ma​​x = a[0]时,它只返回最大值,min总是0;想不出有什么问题。但是当我为 a[0]..a[9] 赋值时,它会起作用。有人能帮助我吗?

【问题讨论】:

    标签: java arrays random numbers min


    【解决方案1】:

    number.nextInt (100); 将返回一个介于 099 之间的数字。由于您使用a[0]; 初始化min(当您创建int 数组时为0),所以您总是得到最小的0。

    尝试用min = Integer.MAX_VALUE;初始化min

    【讨论】:

    • 那是个问题。
    • 好的,解决它。一个简短的问题,所以我可以使用 max = Integer.MIN_Value;最大?
    • @user3018155 是的,您必须使用它。否则,如果你用 0 初始化 max 并且你的数组中只有负值,你将不会得到正确的最大值。
    【解决方案2】:

    我假设您只输入正数。为了使其按预期工作(我假设您想获得输入最少的数字),请使用 Integer.MAX_VALUE 初始化 min。

    问题如下:

    int [] a = new int [10]; 将创建一个由 10 个整数组成的数组,并且由于元素是原始整数,它们被初始化为 0。

    min = max = a[0]; 随后将用 0 初始化 min,即使 x = number.nextInt (100); 稍后可能只返回大于 0 的数字。

    如果您也尝试生成负数,即使将 max 初始化为 0 也是错误的。因此最好用Integer.MIN_VALUE初始化max

    【讨论】:

      【解决方案3】:
      min = max = a[0];  // this statement initialize min variable with 0
      
      if (a[b] < min) min = a[b]; // this statement will never execute because your are assigning new value to a[] on each index, even random class generate 0. 
      

      【讨论】:

        【解决方案4】:
        //if (a[b] < min) min = (a[b]);
        //the condition is never met because the min value of x is always 0
        package array;
        import java.util.*;
        
        public class Array {
        
            public static void main(String[] args) {
                int [] a = new int [10];
                Random number = new Random ();
                int x;
                int min = Integer.MAX_VALUE;
                int max = Integer.MIN_VALUE;
        
                for (int b = 0; b<a.length; b++){
                    x = number.nextInt (100);
                    // System.out.println (x); just for testing x
        
                    a [b]= x;
                    System.out.println (a[b]);
        
                    if (a[b] < min) min = a[b];
                    if (a[b] > max) max = a[b];
                }
        
                System.out.println ("Min is: " + min + " " + "Max is: "+ max ); 
        }
        

        【讨论】: