【问题标题】:Trouble gathering Scanner data无法收集扫描仪数据
【发布时间】:2014-09-16 18:35:17
【问题描述】:
问题:如何收集用户输入的所有信息,将它们存储到 ArrayList 和
显示所有输入的答案?我应该输入六个团队的名称、胜利、分区等,并使用 System.out.println() 将它们显示到一个表中;正如我在 for 循环结束时所尝试的那样
public class PlayoffSelectorClass extends Team {
// main method
public static void main(String[] args) {
Team team1 = new Team();
Team team2 = new Team();
Team team3 = new Team();
Team team4 = new Team();
Team team5 = new Team();
Team team6 = new Team();
for (int i = 0; i < 6; i++) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter team name: ");
String name = input.nextLine();
System.out.println("\nPlease enter the city " + name + " played in: ");
String city = input.nextLine();
System.out.println("\nPlease enter the division " + name + " play in: ");
String division = input.nextLine();
System.out.println("\nPlease enter the number of wins " + name + " has: ");
Integer wins = input.nextInt();
System.out.println("\nPlease enter the number of losses " + name + " has: ");
Integer loses = input.nextInt();
if (i < 5) {
System.out.println("\nEnter your next team...\n");
}
team1.setTeamName(name);
team1.setCity(city);
team1.setDivision(division);
team1.setWins(wins);
team1.setLoses(loses);
}
System.out.println("East W L PCT");
System.out.println(team1.getTeamName() + " " + team1.getWins() + " " + team1.getLoses());
System.out.println(team1.getTeamName() + " " + team1.getWins() + " " + team1.getLoses());
}
}
【问题讨论】:
标签:
java
inheritance
arraylist
polymorphism
【解决方案1】:
如果你为每个玩家显式声明一个变量,你将很难将用户的输入存储到正确的变量中(除非你做了一些讨厌的事情,比如if(i==3) team3.setName(name))。最好创建一个数组列表 (List<Team> teams = new ArrayList<Team>) 并在每个循环中创建一个新的 Team 对象 (Team team = new Team();),您将要填充该对象 (team.setName(name) 等)。在每次迭代结束时,该对象将被添加到您的数组列表中 (teams.add(team))。在所有六次迭代之后,您将拥有一个数组列表,其中包含用户创建的每个团队。现在您可以通过以下方式遍历此列表:
for(Team team: teams) {
//do stuff with the team object, e.g.:
System.out.println(team.getName());
}
【解决方案2】:
你可以像这样使用列表
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PlayoffSelector {
static class Team {
private String teamName;
private String city;
private String division;
private Integer wins;
private Integer loses;
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public String getTeamName() {
return teamName;
}
public void setCity(String city) {
this.city = city;
}
public String getCity() {
return city;
}
public void setDivision(String division) {
this.division = division;
}
public String getDivision() {
return division;
}
public void setWins(Integer wins) {
this.wins = wins;
}
public Integer getWins() {
return wins;
}
public void setLoses(Integer loses) {
this.loses = loses;
}
public Integer getLoses() {
return loses;
}
}
public static void main(String[] args) {
List<Team> teams = new ArrayList<>();
for (int i = 0; i < 2; i++) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter team name: ");
String name = input.nextLine();
System.out.println("\nPlease enter the city " + name + " played in: ");
String city = input.nextLine();
System.out.println("\nPlease enter the division " + name + " play in: ");
String division = input.nextLine();
System.out.println("\nPlease enter the number of wins " + name + " has: ");
Integer wins = input.nextInt();
System.out.println("\nPlease enter the number of losses " + name + " has: ");
Integer loses = input.nextInt();
if (i < 5) {
System.out.println("\nEnter your next team...\n");
}
Team team = new Team();
team.setTeamName(name);
team.setCity(city);
team.setDivision(division);
team.setWins(wins);
team.setLoses(loses);
teams.add(team);
}
System.out.println("East W L PCT");
for (Team team : teams) {
System.out.printf("%s\t%s\t%s\n",team.getTeamName(), team.getWins() , team.getLoses());
}
}
}
【解决方案3】:
如果你确定你想要的团队数量是 6,那么声明一个数组,如
List<Team> teams = new ArrayList<Team>();
这应该是设计变更,您不能保留 Team1、Team2...等。
当你想保存数据时
Team team = null;
for (int i = 0; i < 6; i++) {
team = new Team();
System.out.println("Please enter team name: ");
String teamName = input.nextLine();
team.setTeamName(teamName);
... // Similarly the rest.
teams.add(team);
当您从控制台获取输入时,还有一些额外的检查。检查它是一个空白字符串还是只是一个输入。这些检查将使代码更无错误。