Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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/3/arrays/12.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_Min - Fatal编程技术网

查找数组中整数的最小值(Java)

查找数组中整数的最小值(Java),java,arrays,min,Java,Arrays,Min,我试图找到数组中数字的最小值,但它并不总是正确的。这是我写的代码: for (int i=0; i < arr.length; i++ ) { min = arr[i]; for (j=0; j < arr.length; j++) { if (arr[j] < arr[0]) { min = arr[j]; } } } for(int i=

我试图找到数组中数字的最小值,但它并不总是正确的。这是我写的代码:

        for (int i=0; i < arr.length; i++ ) {
        min = arr[i];
        for (j=0; j < arr.length; j++) {
        if (arr[j] < arr[0]) {
            min = arr[j];
         }
        }
    }   
for(int i=0;i

有人能纠正我吗?

您正在检查每个迭代中的第一个元素,您基本上需要检查最小值

if (arr[j] < min) {
  min = arr[j];
}
if(arr[j]
不需要外循环,它只运行一次,您也不需要使用
i
。你为什么有它

对于内部循环,需要与最小值进行比较。现在,您将它与数组中的第一个元素进行比较,该元素不一定是最小值

min = arr[0];
for (j=0; j < arr.length; j++) {
    if (arr[j] < min) {  //<---fix is here
        min = arr[j];
    }
}
min=arr[0];
对于(j=0;jint-min=arr[0];
for(int num:arr){
if(num

min现在包含最小值。

这里有一个执行此操作的通用算法。您可以为此编写代码

min = arr[0];
for (j=0; j < arr.length; j++) {
    if (arr[j] < min) {  //<---fix is here
        min = arr[j];
    }
}
将数组中的第一项存储为当前最小值

循环遍历数组,从第二项(索引1)开始

对于数组的每次迭代,检查当前项是否较少 大于最小值。如果是,则将其存储为新的最小值

循环结束后,您将获得最小值


如果
arr
是一个非原始数字数组,我建议

java.util.Collections.min(java.util.Arrays.asList(arr));

因为这将更容易维护。如果需要同时提取最小值和最大值,那么恢复手动编码是有道理的,但是如果有库函数可用,我建议不要手动编码循环


在任何情况下,都应该检查
arr!=null
以及是否存在第零个元素。

一种方法是使用java.util.Arrays类:

例如:

public class ArraySort {
public static void main(String[] args) {
    int[] array = {12, 4, 6, 1, 56, 21, 77};
    Arrays.sort(array);
    System.out.println(array[0]);
}
}
在Java文档中,Arrays.sort(int[])将指定的数组按升序进行排序

因此,这里的输出输出为1。

请尝试以下操作:

int min = arr[0];
    for(int j=1;j<arr.length;j++)
    {
            if(min>arr[j])
            {
                min= arr[j];
            }
    }
    System.out.println("min no is "+min);
int min=arr[0];
对于(int j=1;jarr[j])
{
最小值=arr[j];
}
}
系统输出打印项次(“最小编号为”+min);

一个选项是对数组排序并获取第一个元素:

import java.util.Arrays;

...

int ints[] = {30,5,7,4,10};
Arrays.sort(ints);

int min = ints[0];
int max = ints[ints.length - 1];
对于MAX

System.out.println(getMaxValue(your array));

我正在输入5个值并将它们存储在数组中,然后循环查找最小值,但它始终打印0。这段代码有什么问题?我对最大值使用了相同的逻辑,没有问题

public class FindMinValue {

    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        int i;
        int NUM_VALUES = 5;
        int[] userVals = new int [NUM_VALUES];
        
        System.out.println("Enter " + NUM_VALUES + " values one at a time.");
        
        int minVal = userVals[0]; //min value so far
        
        for(i = 0; i < userVals.length; ++i) {
            userVals[i] = scnr.nextInt();
            if(userVals[i] < minVal) {
                minVal = userVals[i];
            }
        }
        System.out.println("Min Value is :" + minVal);
        

    }

}
公共类FindMinValue{
公共静态void main(字符串[]args){
扫描仪scnr=新扫描仪(System.in);
int i;
int NUM_值=5;
int[]userVals=新的int[NUM_值];
System.out.println(“一次输入一个“+NUM_值+”值”);
int minVal=userVals[0];//到目前为止的最小值
对于(i=0;i
您的外部for循环有什么用
arr[j]
应该是
arr[j]
。为安全起见,我将添加空检查和数组长度检查。您正在执行排序操作(
O(nlogn)
),但您可以在线性时间内完成。
System.out.println(getMaxValue(your array));
public class FindMinValue {

    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        int i;
        int NUM_VALUES = 5;
        int[] userVals = new int [NUM_VALUES];
        
        System.out.println("Enter " + NUM_VALUES + " values one at a time.");
        
        int minVal = userVals[0]; //min value so far
        
        for(i = 0; i < userVals.length; ++i) {
            userVals[i] = scnr.nextInt();
            if(userVals[i] < minVal) {
                minVal = userVals[i];
            }
        }
        System.out.println("Min Value is :" + minVal);
        

    }

}