我如何确定输入的最小值?

时间:2016-10-08 15:46:24

标签: java

我的代码要求用户输入动物物种的值,然后将其显示回来。我只需要最后添加一个部分,它也告诉用户最濒危的动物(最低输入的数字)。我在一些地方环顾四周,并使用x< min或x = MAX_VALE等。我似乎无法做任何事情。有没有一种方法更适合我的程序?

import java.util.Scanner;

public class endangered
{
    public static void main(String[] param)
    {
        animal();
        System.exit(0);
    }

    public static void animal()
    {
        int[] array = new int[5];
        int j = 0;
        String[] names = {"Komodo Dragon" , "Manatee" , "Kakapo" , "Florida Panther" , "White Rhino"};
        System.out.println("Please enter the number of wild Komodo Dragons, Manatee, Kakapo, Florida Panthers and White Rhinos.");
        Scanner scan = new Scanner(System.in);
        for (int i=0; i<=4; i++)
        {
            while(scan.hasNextInt())
            {
                array[j] = scan.nextInt();
                int max = array[j];
                j++;
                if(j==5)
                {
                    System.out.println(array[0] + ", " + names[0]);
                    System.out.println(array[1] + ", " + names[1]);
                    System.out.println(array[2] + ", " + names[2]);
                    System.out.println(array[3] + ", " + names[3]);
                    System.out.println(array[4] + ", " + names[4]);
                }
            }
        }
    }
}    

3 个答案:

答案 0 :(得分:2)

您可以做的是使用内置方法对数组进行排序,然后检索最后一个值(最大值)和第一个值(最小值)。

Arrays.sort(array);
int max = array[array.length - 1];
int min = array[0];

有关Java sort类中Arrays方法的更多信息,请参阅此处的描述,

  

public static void sort(int [] a)

     

将指定数组按数字升序排序。

     

参数:   a - 要排序的数组

如果你想获得相应的动物,那么我建议忽略上面的内容并在Java 8中使用流。将String和int数组合成一个2D String数组。使行等于动物的数量,列等于2(例如:对于5只动物,String[][] array = new String[5][2])。对于2D数组中的每一行,第一个元素应该是动物,第二个元素应该是大小(例如:String [][] array = {{"fox", "1"},{"deer","0"},{"bear", "2"}})。以下将返回一个按升序排序的二维数组,并为您提供相应的动物,

String[][] sorted = Arrays.stream(array)
.sorted(Comparator.comparing(x -> Integer.parseInt(x[1])))
.toArray(String[][]::new);
String smallestAnimal = sorted[0][0]; //name of smallest animal
String smallest = sorted[0][1]; //population of smallest animal
String biggestAnimal = sorted[sorted.length - 1][0]; //name of biggest animal
String biggest = sorted[sorted.length - 1][1]; //population of biggest animal

答案 1 :(得分:0)

在java 8中,你可以这样做:

int min = Arrays.stream(array).reduce(Integer.MAX_VALUE, Math::min);

更新:用户也要求打印动物。

如果你还需要归还动物,最好是我们编辑你的代码。 我们将再添加2个变量。第一个 minVal 将包含用户输入的最小数字。第二个, minValIndex 将包含具有最低计数的物种的索引。 我删除了你的while循环,因为没有必要。

  public static void animal()
    {
        int[] array = new int[5];
        int j = 0;
        String[] names = {"Komodo Dragon" , "Manatee" , "Kakapo" , "Florida Panther" , "White Rhino"};
        System.out.println("Please enter the number of wild Komodo Dragons, Manatee, Kakapo, Florida Panthers and White Rhinos.");
        Scanner scan = new Scanner(System.in);
        int minVal = Integer.MAX_VALUE;
        int minValIndex = -1;
        for (int i=0; i<=4; i++)
        {
                array[j] = scan.nextInt();
                if(array[j] < minVal) {
                    minVal = array[j];
                    minValIndex = j;
                }
                int max = array[j];
                j++;
                if(j==5)
                {
                    System.out.println(array[0] + ", " + names[0]);
                    System.out.println(array[1] + ", " + names[1]);
                    System.out.println(array[2] + ", " + names[2]);
                    System.out.println(array[3] + ", " + names[3]);
                    System.out.println(array[4] + ", " + names[4]);
                }

        }
        System.out.println("The smallest entered number:" + minVal);
        System.out.println("The species:" + names[minValIndex]);
    }

答案 2 :(得分:0)

您无法在任何地方计算max。

替换:

int max = array[j]

使用:

max = max > array[j] ? max : array[j];

将最大值存储在数组中。 (这是三元运算符)

现在数组具有相同的值,因此在这种情况下通过以下代码来处理这种可能性:

for(int i = 0; i <= 4; i++) { 
   if(array[i] == max) {
       System.out.println("Max endangered:" + array[i] + name[i]);
   }
}