我对Java比较陌生,想知道如何将变量与单行用户输入分开存储。
提示用户以下列格式输入足球结果
home_name : away_name : home_score : away_score
我正在使用while循环继续询问用户输入,直到他们进入"停止"
(while (input != "stop))
一旦循环被破坏,我希望我的程序能够输出各种数据,比如总玩过的游戏,但是我很难存储home_name
,away_name
等等。如果用户希望输入多行结果。
答案 0 :(得分: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");
数据对象允许编译器执行大量编译时检查,以帮助您了解代码是否正确。如果使用地图,则在运行时才会发现。
答案 1 :(得分: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();