2011-01-14 2 views
0

Я пытаюсь создать программу, которая вычисляет средние баллы для боулеров, средний балл команды и самый высокий средний балл в команде.Запись индивидуального среднего и кумулятивного среднего и самого высокого среднего балла

Проблема:

  1. Я не могу понять, как отобразить все индивидуальный средний игрок в конце без отображения каждый раз в итерации цикла.
  2. Как настроить код, чтобы я мог рассчитать совокупный средний и самый высокий средний балл?

Ниже приведен код, который я написал до сих пор

import java.util.*; 

public class bowlerama2 
{ 
    public static void main(String args[]) 
    { 
     Scanner keyboard=new Scanner(System.in); 
     int players;// for number of players on the team 
     int games=0;// for number of games played 
     int totalGames=0; 
     System.out.println("Enter the number of players on the bowling team."); 
     System.out.println("You must enter a number greater than or equal to three"); 
     players=keyboard.nextInt(); 

     //input validation 
     while (players<3) 
     { 
      System.out.println("Invalid entry. You must enter a number greater than or equal to three for the number of players on the team."); 
      System.out.println("Enter the number of players on the bowling team:"); 
      players=keyboard.nextInt(); 
     } 


     for(int number=1;number<=players;number++) 
     { 
      System.out.println("Enter the number of games bowled by player " + number + ":"); 
      System.out.println("You must enter a number greater than or equal to two."); 
      games=keyboard.nextInt(); 
      while (games<2) 
      { 
       System.out.println("Invalid entry.You must enter a number greater than or equal to two for the number of games played"); 
       System.out.println("Enter the number of games bowled by player " +number+ ":"); 
       games=keyboard.nextInt(); 
      } 
      totalGames+=games; 

      receive (number, games, totalGames); 

     } 

    } 
    public static void receive (int number, int games, int totalGames) 
    { 
     Scanner keyboard= new Scanner(System.in); 
     int total=0;//accumulator for individual scores 
     int score=0; 
     int average=0; 


     for (int amount=1;amount<=games;amount++) 
     { 

      System.out.println("Enter the score for player " +number+ " in game " + amount + ":"); 
      score=keyboard.nextInt(); 

      //input validation 
      while(score<0 || score>300) 
      { 
       System.out.println("Invalid entry. Score must be greater than or equal to zero and less than or equal to three hundred"); 
       System.out.println("Enter the score for player " + number+ " in game " +amount+ ":"); 
       score=keyboard.nextInt(); 
      } 

      total+=score; 
      average=total/amount; 

      System.out.println("The average score for player " +number+ " is:" + average); 
     } 




    } 

} 
+0

несвязанный: форматирование сломана. – Nishant

+0

@Nishant Исправлено: – marcog

ответ

0

1) Хранить средние значения для каждого игрока в качестве ArrayList. Так что, когда вы вычисляете среднее значение, вы просто бросаете его в список и имеете его уже.

ArrayList arrayList = new ArrayList(); 
arrayList.add(new Integer(average)); 

затем получить доступ к списку в основной метод для очков игрока вы хотите

2) для кумулятивного среднем только перебрать в ArrayList, добавляя баллы вместе, а затем разделить на длину ArrayList. Для наивысшего балла сделайте оператор if, чтобы проверить, превышает ли средний балл для каждого игрока, чем предыдущий средний балл предыдущего игрока, если он установлен равным старшему среднему балу.

+0

, чтобы получить доступ к списку в основном методе, в котором метод должен быть объявлен в списке – trs

+0

. Вы хотите либо объявить список в своем главном, а затем передать его в прием или сделать его класс var. Я рекомендую передать его только потому, что это лучшая практика. – Grammin

0

Вам понадобится использовать временное хранилище данных. Что-то вроде массива или ArrayList (http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html).

List al = new ArrayList<Type>(); 

Для вашего случая Тип будет целым. Когда у вас есть все, что хранится в ArrayList, вы можете просто перебрать ArrayList, чтобы скомпилировать все значения. Также, чтобы найти «max», вам нужно будет сначала установить целочисленную переменную как -999. Затем выполните все ваши значения, и если значение> max, установите эту переменную как макс.

0

Я пока догадываюсь из кода, что вы еще не охватили ArrayList, и что если вы отправляете решение, которое его использует, ваш учитель может быть немного подозрительным :-) Похоже, возможно, пара простых массивов поможет. Сначала вам нужно будет получить количество игроков, чтобы вы могли создавать массивы нужного размера. Используйте один массив для хранения накопленных баллов для каждого игрока и один для хранения количества баллов для каждого игрока. Заполняйте значения массива по мере ввода ввода. Сохраненные значения затем должны позволять вам вычислять средний балл для каждого игрока, средней команды и максимального среднего игрока.

Ключ в том, что есть входная фаза, в которой вы заполняете массивы, а затем этап вычисления (где вы итерации через массивы и выполняете свои какуляции), а затем фазу отображения.

+0

Максимальное количество игроков не ограничено как минимум 3 – trs

+0

Обновлено, чтобы отразить это. – JST

0
  1. оценки для каждого игрока. вы можете сделать это с помощью конкатенации строк. сначала создайте пустую старую строку. после каждого приема добавьте новые данные в строку. println строка результата после петли игроков.
  2. для команды avarage и максимальной пропускной способности.

    team_av = сумма (player_av)/игроки

в основном методе:

double sum_player_avarage=0 
    double highest_avarage=0 

в методе получения возврата двойного значения игрок насчитайте.

double player_av= receive (number, games, totalGames); 
if (highest_avarage<player_av) highest_avarage=player_av; 
sum_player_avarage+=player_av; 

после всего:

team_avarage=sum_player_avarage/players; 

println(team_avarage); 
println(highest_avarage) 
println(StringWithPlayersAvarage) 
+0

"Оценка каждого игрока, вы можете сделать это с помощью конкатенации строк. Сначала создайте пустую строку. После каждого получения добавьте новые данные в строку. Println result string after players loop." - Это ужасное решение. Вы принимаете динамические данные и статируете их. – Grammin

+0

, но для домашней работы это прямое отсутствие ООП и никакая версия коллекции не могут быть более подходящими. никто не ожидает, что студент сделает сложное решение. может быть, он может использовать буферизованный вывод записи для сброса данных после всех вычислений –

Смежные вопросы