2016-10-08 4 views
0

Мой код просит пользователя ввести значения видов животных, а затем отобразит их обратно. Мне просто нужно, наконец, добавить часть, которая также сообщает пользователю самое опасное животное (одно будет самым низким введенным номером). Я огляделся по местам и triec, используя 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]); 
       } 
      } 
     } 
    } 
}  

ответ

0

В Java 8, вы можете сделать что-то вроде этого:

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

Update: Пользователь также попросил распечатать животное.

Если вам нужно вернуть животное, было бы лучше, если бы мы отредактировали ваш код. Мы добавим еще 2 переменных. Первый, minVal будет содержать самое низкое число, которое вводил пользователь. Второй, minValIndex будет содержать индекс вида с самым низким счетом. Я удалил ваш цикл, потому что в этом не было необходимости.

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]); 
    } 
+0

Есть ли способ вернуть соответствующее животное для наименьшего числа? –

+0

Да, я отредактировал свой ответ. – Dvorog

+0

Отлично. Спасибо за помощь! Вам нужно нанять вас как наставника lol –

2

Что вы можете сделать, это сортировать массив, используя встроенный метод, а затем получить последнее значение (наибольшая) и первое значение (наименьшее).

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

Более подробную информацию о методе sort в Arrays класса в Java, вот описание того, что именно делает,

государственной статической силы сортировки (ИНТ [] а)

Сортирует указанный массив в возрастающий порядковый номер.

Параметры: а - массив, который будет отсортированные

Если вы хотите, чтобы получить соответствующее животное, то я хотел бы предложить, не обращая внимания на выше и использовать потоки в Java 8. Объедините Струнный и целочисленный массив в один 2D массив строк. Сделайте строки равными количеству животных и столбцам, равным 2 (например: для 5 животных, String[][] array = new String[5][2]). Для каждой строки в 2D-массиве первым элементом должен быть животное, а второй элемент должен быть размером (например: String [][] array = {{"fox", "1"},{"deer","0"},{"bear", "2"}}). Ниже будет возвращать вам 2D массив, отсортированный в порядке возрастания и дает вам соответствующее животное с ним,

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 
+0

Удивительных! Благодарю вас. –

+0

@ ZainMohamed не проблема, не забудьте упредить или принять ответ, если вы сочтете это полезным. Счастливое кодирование! –

+0

сделаю. Еще кое-что. Будет ли ваш метод возвращать наибольшее число или животное? –

0

Вы ничего не вычисляете в любом месте.

Заменить:

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]); 
    } 
} 
Смежные вопросы