【问题标题】: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&lt;Team&gt; teams = new ArrayList&lt;Team&gt;) 并在每个循环中创建一个新的 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);
        

        当您从控制台获取输入时,还有一些额外的检查。检查它是一个空白字符串还是只是一个输入。这些检查将使代码更无错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-20
          • 2010-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多