Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初学者:数组中的最小值(Java)_Java_Arrays_Sorting_Min - Fatal编程技术网

初学者:数组中的最小值(Java)

初学者:数组中的最小值(Java),java,arrays,sorting,min,Java,Arrays,Sorting,Min,当我执行这个程序时,它会很好地打印最大值,而最小值总是打印为零。我继续抓我的头。。。有人能看出这里出了什么问题吗?谢谢你的关注 import java.util.Scanner; public class MinMax { public static void main(String[] args) { Scanner kb = new Scanner(System.in); int [] numbers = new in

当我执行这个程序时,它会很好地打印最大值,而最小值总是打印为零。我继续抓我的头。。。有人能看出这里出了什么问题吗?谢谢你的关注

    import java.util.Scanner;
    public class MinMax
    {

    public static void main(String[] args)
    {
        Scanner kb = new Scanner(System.in);
        int [] numbers = new int[5];
        int max = numbers[0]; 
        int min = numbers[0];

        for (int i = 0; i < numbers.length; i++)
        {
            System.out.println("Enter your next number:");
            numbers[i] = kb.nextInt();
            if (numbers[i] > max)
            {
                max = numbers[i];
            }
            if (min > numbers[i])
            {
                min = numbers[i];
            }
        }

        System.out.println("The maximum value in your array is " + max);
        System.out.println("The minimum value in your array is " + min);
    }

}
import java.util.Scanner;
公共类极小值
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
int[]数字=新的int[5];
int max=数字[0];
int min=数字[0];
for(int i=0;i最大值)
{
max=数字[i];
}
如果(最小值>数字[i])
{
min=数字[i];
}
}
System.out.println(“数组中的最大值为”+max);
System.out.println(“数组中的最小值为“+min”);
}
}

问题在于,当声明数组时,数组中的整数被设置为0。将最小值设置为
数字[0]
会将最小值设置为0。如果那不是你的min,你的代码就会失败


在这种情况下,您不需要数组-您可以存储用户输入的任何内容。除此之外,只需检查
i==0
,当它为0时,将min和max设置为
number[0]
。(如果对max不这样做,所有负片的数组都会失败。)

这很简单。min变量永远不会更新,因为每次计算min>numbers[i]时都返回false。让我们来看一个例子:

  • 最小值=0.0>数字[i]=4.5->错误
  • 最小值=0.0>数字[i]=3.8->错误
  • min=0.0>数字[i]=-8.9->true,min=-8.9
  • min=-8.9>数字[i]=7.5->false
  • 最小值=-8.9<数字[i]=5.6->错误
  • 最小值为:-8.9

    使用Java 8,您可以使用lambdas轻松获得最大值和最小值:

    max = Arrays.stream(numbers).max().getAsDouble();
    min = Arrays.stream(numbers).min().getAsDouble();
    

    正如这里的其他答案所说,问题是
    数字[0]
    开始初始化为
    0
    ,因此无论用户输入的数字是多少,您的代码仍然会发现
    0
    是最小值

    您需要的是一个额外的状态来表示“我还没有任何最小值”。您可以使用一个额外的
    boolean
    变量来表示此tate,或者如果您可以使用
    Integer
    包装类型,则可以使用
    null

    例如:

    Integer minimum = null;
    Integer maximum = null;
    
    for (int i = 0; i < 5; i++) {
      int number = kb.nextInt();
      if (minimum == null || number < minimum) {
        minimum = number;
      }
      if (maximum == null || number > maximum) {
        maximum = number;
      }
    }
    
    System.out.println("minimum: " + minimum);
    System.out.println("maximum: " + maximum);
    
    最小整数=null;
    最大整数=空;
    对于(int i=0;i<5;i++){
    int number=kb.nextInt();
    if(最小值==null | |数<最小值){
    最小值=数量;
    }
    如果(最大值==null | |数>最大值){
    最大值=数量;
    }
    }
    System.out.println(“最小值:+最小值”);
    System.out.println(“最大值:”+最大值);
    
    使用所有负数进行测试将使最大值0和最小值=变为用户输入数组中的实际最小值!