使用数组存储来自用户输入的多个变量

时间:2016-12-18 18:03:04

标签: java arrays while-loop user-input

我对Java比较陌生,想知道如何将变量与单行用户输入分开存储。

提示用户以下列格式输入足球结果

home_name : away_name : home_score : away_score

我正在使用while循环继续询问用户输入,直到他们进入"停止"

(while (input != "stop))

一旦循环被破坏,我希望我的程序能够输出各种数据,比如总玩过的游戏,但是我很难存储home_nameaway_name等等。如果用户希望输入多行结果。

2 个答案:

答案 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();