2016-12-18 5 views
0

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

В минуту пользователю предлагается ввести футбольные результаты в следующем формате

home_name : away_name : home_score : away_score 

и я использую время цикла продолжать запрашивать пользователя для входа, пока они не войдут «стоп»

(while (input != "stop)) 

Как только цикл сломан, я хотел бы, чтобы моя программа выдавала множество данных, таких как общие игры, но я изо всех сил стараюсь хранить home_name, away_name и т. Д., Особенно если пользователь хочет ввести несколько строк результатов ,

+0

(Предположим, что пользователь хочет ввести 100 строк результатов матча) – gv555

+0

Пожалуйста, пост любой код, у вас есть, и указывают на определенные проблемы, которые вы имеете. Это поможет нам ** помочь ** вам **. – 2ps

+0

с меткой Java, так как вопросы касаются java ....... – Tim

ответ

0

Два господствующий способ сохранения "записи" является: объекты

  • Карта
  • данных

Карты является более общей:

Map<String,String> match = new HashMap<>(); 
match.put("home_name", "Alvechurch Villa"); 
match.put("away_name", "Leamington"); 
match.put("home_score", "0"); 
match.put("away_score", "6"); 

Вы можете добавить

List<Map<String,String>> matches = new ArrayList<>(); 
matches.add(list); 

... и восстановить их:

Map<String,String> match = matches.get(0); 
System.out.println(match.get("away_score")); 

Объект данных более настроен на свой формат данных, но вы должны написать свой класс самостоятельно.

public class Match { 
    public String homeName; 
    public String awayName; 
    public int homeScore; 
    public int awayScore; 
} 

Теперь вы можете использовать этот класс:

Match match = new Match(); 
match.homeName = "Studley"; 
// etc. 

Вы можете добавлять и извлекать их из списков тоже:

List<Match> matches = new ArrayList<>(); 
matches.add(match); 
Match aMatch = matches.get(0); 

Это простое, но это считается плохой практикой, чтобы общественность таких полей - лучше использовать их с помощью методов. Для краткости, вот класс данных только с одним полем:

public class Player { 
    private String name; 
    public Player(String name) { 
     this.name = name; 
    } 

    public String name() { 
     return name; 
    } 
} 

Player neilStacey = new Player("Neil Stacey"); 

Вы можете использовать ту же технику, со всеми полями в Match.

(Общий стиль назвать метод как этот getName(), а также иметь setName(). Я использовал другой стиль и сделал объект неизменны, в попытке установить хороший пример!)


Одним из преимуществ объекта данных является то, что он имеет разные типы для разных полей: homeName - это строка, homeScore - целое число. Все поля на карте - это строки. Вы можете обойти это, используя Map<String,Object>, но затем, как потребитель, вы должны придать правильному типу при чтении.

String homeName = (String) match.get("home_name"); 

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

+0

я кратко понимаю, но я до сих пор изо всех сил, чтобы получить мой как я возьму каждую переменную и сохраню ее с пользовательского ввода при вводе следующего формата = home_name: away_name: home_score: away_score. Я не хочу запрашивать пользователя отдельно для каждого входа. – gv555

+0

Например, моя текущая базовая структура выглядит так: boolean stop = true; \t \t \t \t в то время как (остановка) \t \t { \t \t System.out.println ("Пожалуйста, введите результаты в следующем формате" \t \t \t \t + "HOME_TEAM_NAME: AWAY_TEAM_NAME: HOME_TEAM_SCORE: AWAY_TEAM_SCORE" \t \t \t \t + "или введите stop to quit"); \t \t \t \t Строковый отклик = scan.nextLine(); \t \t, если (response.equals ("стоп")) \t \t { \t \t \t стоп = ложь; \t \t} \t \t} – gv555

+0

Похоже, вы задали вопрос о хранении переменных, когда на самом деле вы хотите знать, как разделить строку. Google «Java split string». – slim

0

Запросить пользователя отдельно для каждого входа.

System.out.println("home_name: "); 
String hN = scan.next(); 
System.out.println("away_name: "); 
String aN = scan.next(); 
System.out.println("home_score: "); 
String hS = scan.next(); 
System.out.println("away_score: "); 
String aS = scan.next(); 
+0

Я бы хотел, чтобы пользователи вводили только в следующем формате = home_name: away_name: home_score: away_score, а не отдельно для каждой переменной. – gv555