【问题标题】:Declaring String Variables within a while loop without it looping all throughout - java在while循环中声明字符串变量,而不是整个循环 - java
【发布时间】:2020-06-13 01:07:03
【问题描述】:

我被困在我应该声明一个名为“phrase”的字符串变量的地方,它不应该一直循环。

给你一个想法,我的任务是:与选项 1 类似,除了用户在完成为第一队输入结果时输入“N”(而不是“Q”)。然后,程序输入第二个团队名称及其结果,直到输入“Q”。输出两条语句,例如选项 1 中的语句,然后是第三条语句,说明哪个团队排名第一(基于分数)

示例输入:

2
Toronto
W
W
L
O
W
O
W
N
Montreal // how would I make this appear in the same while loop?
L
L
O 
L
L
W
L
L
Q

样本输出:

Toronto has played 7 games and has earned 10 points
Montreal has played 8 games and has earned 3 points
Toronto is in first place by 7 points

更新

我的代码:

else if (option == 2){
            int counter = 0;
            int totalpoints = 0;
            String phrase = keyboard.next();
            while(go){
                String letter = keyboard.next();
                    if (letter.equals("W")){
                    pointsW++;
                    }
                    else if (letter.equals("L")){
                    pointsL++;
                    }
                    else if (letter.equals("O")){
                    pointsO++;
                    }
                    counter++;
                    if (letter.equals("N")){
                        totalpoints = pointsW + pointsL + pointsO;
                        counter--;
                        go = false;
                }
            }
            int counter2 = 0;
            int totalpoints2 = 0;
            pointsW = 2;
            pointsL = 0;
            pointsO = 1;
            String phrase2 = keyboard.next();
                while (go2){
                    String letter2 = keyboard.next();
                    if (letter2.equals("W")){
                    pointsW++;
                    }
                    else if (letter2.equals("L")){
                    pointsL++;
                    }
                    else if (letter2.equals("O")){
                    pointsO++;
                    }
                    counter2++;
                    if (letter2.equals("Q")){
                        counter2--;
                        totalpoints2 = pointsW + pointsL + pointsO;
                        go2 = false;
                    }
                }
                            System.out.println(phrase + " has played "+counter+" games and has earned "+totalpoints+" points");
                            System.out.println(phrase2 + " has played "+counter2+" games and has earned "+totalpoints2+" points");
                    if (totalpoints > totalpoints2){
                            System.out.println(phrase + " is in first place by "+(totalpoints - totalpoints2) + " points");
                    }else{
                            System.out.println(phrase2 + " is in first place by "+(totalpoints2 - totalpoints) + " points");
            }
        }

示例输入:

2
Toronto
W
W
L
O
W
O
W
N
Montreal 
L
L
O 
L
L
W
L
L
Q

问题:这是我得到的输出“蒙特利尔打了 8 场比赛并获得了 11 分”,而应该是“蒙特利尔已经打了 8 场比赛并获得了 3 分”

The output I am getting


【问题讨论】:

    标签: java loops while-loop


    【解决方案1】:
    1. 您可以为各个点重复使用相同的变量,即pointsWpointsO,因为您不希望将它们的值保留到发布结果的最后。循环条件变量即go和用于输入赢/输的变量即letter也是如此。
    2. 您将需要数组或不同的变量来存储总分、计数和团队名称。

      import java.util.Scanner;
      
      public class Standings {
          public static void main(String[] args) {
              Scanner keyboard = new Scanner(System.in);
              int option = keyboard.nextInt();
              int pointsW = 0;
              int pointsO = 0;
              String letter;
              boolean go = true;
              if (option == 2) {
                  // Variables for total points, counting, and name for the first team
                  int playedGamesTeamOne = 0;
                  int teamOnePoints = 0;
                  String teamOneName = keyboard.next();
                  while (go) {
                      letter = keyboard.next();
                      if (letter.equals("W")) {
                          pointsW += 2;
                      } else if (letter.equals("O")) {
                          pointsO++;
                      }
                      playedGamesTeamOne++;
                      if (letter.equals("N")) {
                          teamOnePoints = pointsW + pointsO;
                          playedGamesTeamOne--;
                          go = false;
                      }
                  }
      
                  // Reset common variables
                  go = true;
                  pointsW = 0;
                  pointsO = 0;
      
                  // Variables for total points, counting, and name for the second team
                  int playedGamesTeamTwo = 0;
                  int teamTwoPoints = 0;
                  String teamTwoName = keyboard.next();
                  while (go) {
                      letter = keyboard.next();
                      if (letter.equals("W")) {
                          pointsW += 2;
                      } else if (letter.equals("O")) {
                          pointsO++;
                      }
                      playedGamesTeamTwo++;
                      if (letter.equals("Q")) {
                          teamTwoPoints = pointsW + pointsO;
                          playedGamesTeamTwo--;
                          go = false;
                      }
                  }
      
                  System.out.println(teamOneName + " has played " + playedGamesTeamOne + " games and has earned "
                          + teamOnePoints + " points");
                  System.out.println(teamTwoName + " has played " + playedGamesTeamTwo + " games and has earned "
                          + teamTwoPoints + " points");
                  if (teamOnePoints > teamTwoPoints) {
                      System.out
                              .println(teamOneName + " is in first place by " + (teamOnePoints - teamTwoPoints) + " points");
                  } else {
                      System.out
                              .println(teamTwoName + " is in first place by " + (teamTwoPoints - teamOnePoints) + " points");
                  }
              }
          }
      }
      

      示例运行:

      2
      Toronto
      W
      W
      L
      O
      W
      O
      W
      N
      Montreal 
      L
      L
      O
      L
      L
      W
      L
      L
      Q
      Toronto has played 7 games and has earned 10 points
      Montreal has played 8 games and has earned 3 points
      Toronto is in first place by 7 points
      

    【讨论】:

    • 我已经用选项 2 的新代码和我的输出显示的内容编辑了我的帖子
    • 玩家每次获胜应该获得多少分 (W)?玩家每次输球应该输多少分(L)?对于每个O,玩家应该输/赢多少分? O 指定了什么?
    • 所以“W”表示2分,“L”表示0分,“O”表示玩家将获得1分
    • 对于“蒙特利尔”场景,应该是“蒙特利尔赢了 3 分”,但我得到的是“蒙特利尔赢了 11 分”,这是为什么呢?
    • 所以赢2分,输0分,加时1分。因此,由于蒙特利尔有 6 负 1 胜和 1 O,所以它将是 0+0+0+0+0+0+2+1 = 总分 3 分
    【解决方案2】:

    您可以将此代码用于选项二

         Scanner keyboard = new Scanner(System.in);
    
        int teamCounter = 1;
        //String[] teamsNames = new String[2];
        String teamOneName="";
        String teamTwoName="";
        //int[] playedGames = new int[2];
        int playedGamesTeamOne = 0;
        int playedGamesTeamTwo = 0;
        //int[] points = new int[2];
        int teamOnePoints = 0;
        int teamTwoPoints = 0;
        boolean firstTimeTeam1 = true;
        boolean firstTimeTeam2 = true;
        while (teamCounter <= 2) {
            if (teamCounter == 1) {
                if (firstTimeTeam1) {
                    teamOneName = keyboard.nextLine();
                    firstTimeTeam1 = false;
                }
    
                String letter = keyboard.next();
                if (letter.equals("W")) {
                    teamOnePoints += 2;
                    playedGamesTeamOne++;
                } else if (letter.equals("L")) {
                    playedGamesTeamOne++;
                } else if (letter.equals("O")) {
                    teamOnePoints += 1;
                    playedGamesTeamOne++;
                } else if (letter.equals("N")) {
                    teamCounter++;
                }
    
    
            } else {
                if (firstTimeTeam2) {
                    teamTwoName = keyboard.next();
                    firstTimeTeam2 = false;
                }
    
                String letter = keyboard.next();
                if (letter.equals("W")) {
                    teamTwoPoints += 2;
                    playedGamesTeamTwo++;
                } else if (letter.equals("L")) {
                    playedGamesTeamTwo++;
                } else if (letter.equals("O")) {
                    teamTwoPoints += 1;
                    playedGamesTeamTwo++;
                } else if (letter.equals("Q")) {
                    teamCounter++;
                }
            }
        }
        System.out.println(teamOneName + " has played " + playedGamesTeamOne + " games and has earned " + teamOnePoints + " points");
        System.out.println(teamTwoName + " has played " + playedGamesTeamTwo + " games and has earned " + teamTwoPoints + " points");
        if (teamOnePoints > teamTwoPoints) {
            System.out.println(teamOneName + " is in first place by " + (teamOnePoints-teamTwoPoints) + " points");
        } else {
            System.out.println(teamTwoName + " is in first place by " + (teamTwoPoints-teamOnePoints) + " points");
        }
    

    【讨论】:

    • 我编辑了我的答案以在没有数组的情况下工作,检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多