2013-10-07 4 views
0

ОБНОВЛЕНИЕ: Выяснено, код был исправлен ниже. Добавлен цикл while для подтверждения значений 0 или выше.Найденные самые высокие и самые низкие значения в списке, теперь необходимо найти свою позицию (java)

Так что я выполняю задание, в котором пользователь вводит 8 баллов, и вы должны найти наивысшие и низкие баллы и их положение в том порядке, в котором они были указаны. Я смог найти самые высокие и самые низкие оценки, но я не могу понять, как найти их позицию. Пожалуйста, помогите мне. Вот мой код до сих пор.

import java.util.Scanner; 
public class HighestLowestPoints { 
    public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 

    int largest = -1; 
    int smallest = 0; 
    int highGame = 1; 
    int lowGame = 1; 

    for(int games = 1; games <= 8; games++) { 
     System.out.println("Please enter the Texans' score in game " + games); 
     int points = keyboard.nextInt(); 
     while(points < 0) { 
      System.out.println("Please enter a value 0 or above"); 
      points = keyboard.nextInt(); 
     } 
     if(games == 1) { 
      smallest = points; 
     } 
     if(points > largest) { 
      largest = points; 
      highGame = games; 
     } 
     if(points < smallest) { 
      smallest = points; 
      lowGame = games; 
     } 
     if(games == 8){ 
      System.out.println(largest + " in game " + highGame + "\n" 
           + smallest + " in game " + lowGame); 
     } 

    } 
    } 
} 
+0

Что именно вы подразумеваете под «позицией»? Это когда они были введены (т. Е. «Самый большой» было введено 5-е число)? –

+0

/*** точно ***/ –

+0

Прохладный, рад, что вы его работали. В будущем, пожалуйста, укажите конкретные данные, чтобы уточнить вопросы. Кроме того, вместо редактирования исходного вопроса с исправленным кодом отправьте ответ ниже, если вы считаете его склонным. Проблема с исправлением исходного кода заключается в том, что теперь все ответы, написанные людьми, в основном были признаны недействительными. Просто FYI на будущее. –

ответ

1

Ваш почти там. Вам нужно добавить к переменным, чтобы сохранить hightGame и lowerGame, и просто назначьте их, когда вы установите максимальный и самый низкий балл соответственно.

Ex:

if(points < smallest) { 
     smallest = points; 
     lowestGame = games; 
    } 
+0

Ничего себе очень быстрые ответы! Спасибо, ребята, я чувствую себя таким идиотом. Я сразу понял это после того, как я разместил вопрос и снова просмотрел код. Затем я вернулся сюда, и есть тонны ответов, говорящих, чтобы сделать еще две переменные. ха-ха все равно спасибо ребятам. большое сообщество! –

1

Вы можете использовать игру переменной счетчика в вашей цикл содержит свою позицию :-)

0

Добавить еще 2 переменные, maxIndex и minIndex и при установке наименьшему и наибольшему установите соответствующую переменную, а с переменной «игры» (содержит позицию).

0

создать две новые переменные:

int highPos = -1; int lowPos = -1;

Каждый раз, когда вы назначаете наименьшее, назначайте игры lowPos Каждый раз, когда вы назначаете наивысший, назначайте игры highPos.

0

добавить

int lPos = 0, sPos = 0; 

до вашего for цикла.

добавьте это lPos = games в ваш if-блок, где найдете наибольшее количество и sPos = games до if-блока с наименьшим.

0

Кроме того, почему вы назначаете самый низкий в первой игре, но не самый высокий?

if(games == 1) { 
    smallest = points; 
} 
+0

Потому что все игры будут выше 0, что является исходным значением для самого высокого. Я назначил наименьшую первую игру, потому что для остальных игр нужно что-то сравнить, и я не хотел, чтобы исходное значение самого низкого было миллионом или чем-то еще. –

0

Просто для информации. Вы также можете избежать всех этих различий if и сделать код более читаемым, если бы вы сохранили все свои игры в ArrayList. А затем воспользуйтесь методом Collections.max, чтобы получить максимальную игру и Collections.min, чтобы получить минимальную игру. Затем с помощью метода list.indexOf вы можете найти позицию, в которой значение добавлено в список.

Scanner keyboard = new Scanner(System.in); 
List<Integer> numbers = new ArrayList<Integer>(); 
for(int games = 1; games <= 8; games++) { 
    System.out.println("Please enter the Texans' score in game " + games); 
    int points = keyboard.nextInt(); 
    while(points < 0) { 
     System.out.println("Please enter a value 0 or above"); 
    points = keyboard.nextInt(); 
    } 
    numbers.add(points); 
} 
StringBuilder output = new StringBuilder(); 
output.append("Maximum points: " + Collections.max(numbers)); 
output.append(" in game: " + (numbers.indexOf(Collections.max(numbers)) + 1)); 
output.append(" minimum points: " + Collections.min(numbers)); 
output.append(" in game: " + (numbers.indexOf(Collections.min(numbers)) + 1)); 
System.out.println(output.toString()); 
Смежные вопросы