Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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_Max_Minimum - Fatal编程技术网

Java 如何在用户定义的数组中获取最小值和最大值?

Java 如何在用户定义的数组中获取最小值和最大值?,java,arrays,max,minimum,Java,Arrays,Max,Minimum,我想得到数组中的最小值和最大值。用户输入n个数组后,它将打印该数组中的最小值和最大值 下面是一个示例输出 这是到目前为止我的代码 public static void main(String[] args) { Scanner input = new Scanner(System.in); try { System.out.println("Enter array size: "); int n

我想得到数组中的最小值和最大值。用户输入n个数组后,它将打印该数组中的最小值和最大值

下面是一个示例输出

这是到目前为止我的代码

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            System.out.println("Enter array size: ");
            int n = input.nextInt();

            int [] array = new int[n];
            int max = getMaxValue(array);
            int min = getMinValue(array);

            System.out.println("Enter " + n + " elements:");
            for (int i = 1; i <= array.length; i++) {
                array[i] = input.nextInt();
            }

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

        } catch (InputMismatchException e) {
            System.out.println("INVALID INPUT >> PLEASE INPUT A NUMBER");
        }
    }

    private static int getMaxValue(int[] array) {
        int maxValue = array[0];
        for (int i = 1; i < array.length; i++){
            if (array[i] > maxValue){
                maxValue = array[i];
            }
        }
        return maxValue;
    }

    private static int getMinValue(int[] array) {
        int minValue = array[0];
        for (int i = 1; i < array.length; i++){
            if (array[i] < minValue) {
                minValue = array[i];
            }
        }
        return minValue;
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
试一试{
System.out.println(“输入数组大小:”);
int n=input.nextInt();
int[]数组=新的int[n];
int max=getMaxValue(数组);
int min=getMinValue(数组);
System.out.println(“输入“+n+”元素:”);
对于(int i=1;i最大值){
最大值=数组[i];
}
}
返回最大值;
}
私有静态int getMinValue(int[]数组){
int minValue=数组[0];
for(int i=1;i
有几个问题使该程序无法运行:

  • getMinValue和getMaxValue应该在输入循环之后调用
  • 所有3个循环都从1开始索引,它们应该从0开始

  • 输入循环重复,直到
    i您的代码中出现以下3个问题:

  • int max=getMaxValue(数组)
    int min=getMinValue(数组)
    在错误的位置调用
  • 初始化int数组时,数组中的默认值为
    0
    。 因此,当您调用
    getMaxValue()

    array[0]=0
    与数组中的所有剩余值(即
    0
    )进行比较,其中0是最大值。
    这同样适用于
    getMinValue()

  • 您调用了函数
    getMaxValue()
    getMinValue()
    ,但没有使用用户输入填充数组。 您应该使用从
    0到array.length的for循环
  • 这将导致ArrayIndexOutOfBoundException,因为数组索引从
    0到n-1开始,您允许它一直运行到
    1到n

    此外,可以在一个函数中查找最小值和最大值。 通过将返回类型保持为数组

    public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            try {
                System.out.println("Enter array size: ");
                int n = input.nextInt();
    
                int [] array = new int[n];
                
                System.out.println("Enter " + n + " elements:"); // <-- changed
                for (int i = 0; i < array.length; i++) {
                    array[i] = input.nextInt();
                }
                
                int max_min[] = getMax_MinValue(array); // <- notice this.
                
                System.out.println("Max Value: " + max_min[0]);
                System.out.println("Min Value: " + max_min[1]);
    
            } catch (InputMismatchException e) {
                System.out.println("INVALID INPUT >> PLEASE INPUT A NUMBER");
            }finally {
                input.close(); // close the scanner 
            }
        }
    
        // return type changed 
        private static int[] getMax_MinValue(int[] array) {
           
            int maxValue = array[0];
            int minValue = array[0];
           
            for (int i = 0; i < array.length; i++){
    
                if (array[i] > maxValue){
                    maxValue = array[i];
                }
                if(array[i] < minValue) {
                    minValue = array[i];
                }
    
            }
            
            int min_max[] = {maxValue,minValue}; // min_max[0] has max value and min_max[1] has min value
            return min_max;
        }
    
    这不是一个恰当的答案

    但是,由于
    getMaxValue
    getMinValue
    的实现有一个轻微的缺陷:空数组将引发
    ArrayIndexOutOfBoundException

    尤其是可以使用流类

    private static int getMaxValue(int[] array) {
        return IntStream.of(array).max().orElse(0);
    }
    
    private static int getMinValue(int[] array) {
        return IntStream.of(array).min().orElse(0);
    }
    

    max
    min
    生成一个
    optionant
    ,对于空数组,可以给出一个默认值(
    orElse
    )。

    问题是什么?您必须在请求用户输入后计算最大值和最小值,而不是之前。您还应该将try/catch放在靠近输入的位置。按照现在的方式,如果他们输入格式错误的文本,就会中断循环。当我运行程序时,它不会在数组中显示最大值和最小值。例如,在输入n个数组之后,程序将在此之后结束,但不显示最小值和最大值。它不显示数组中的最大值和最小值,因为在调用最小/最大方法时,数组不包含任何值。
    for (int i = 1; i <= array.length; i++) {
       array[i] = input.nextInt();
     }
    
    public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            try {
                System.out.println("Enter array size: ");
                int n = input.nextInt();
    
                int [] array = new int[n];
                
                System.out.println("Enter " + n + " elements:"); // <-- changed
                for (int i = 0; i < array.length; i++) {
                    array[i] = input.nextInt();
                }
                
                int max_min[] = getMax_MinValue(array); // <- notice this.
                
                System.out.println("Max Value: " + max_min[0]);
                System.out.println("Min Value: " + max_min[1]);
    
            } catch (InputMismatchException e) {
                System.out.println("INVALID INPUT >> PLEASE INPUT A NUMBER");
            }finally {
                input.close(); // close the scanner 
            }
        }
    
        // return type changed 
        private static int[] getMax_MinValue(int[] array) {
           
            int maxValue = array[0];
            int minValue = array[0];
           
            for (int i = 0; i < array.length; i++){
    
                if (array[i] > maxValue){
                    maxValue = array[i];
                }
                if(array[i] < minValue) {
                    minValue = array[i];
                }
    
            }
            
            int min_max[] = {maxValue,minValue}; // min_max[0] has max value and min_max[1] has min value
            return min_max;
        }
    
    Enter array size: 
    8
    Enter 8 elements:
    5
    23
    9
    14
    45
    36
    42
    39
    Max Value: 45
    Min Value: 5
    
    private static int getMaxValue(int[] array) {
        return IntStream.of(array).max().orElse(0);
    }
    
    private static int getMinValue(int[] array) {
        return IntStream.of(array).min().orElse(0);
    }