Java-返回数据问题';在一个循环内的精确性

Java-返回数据问题';在一个循环内的精确性,java,class,infinite-loop,Java,Class,Infinite Loop,我之前的问题已经解决了。然而,我从另一个类中获取的数据的准确性有问题。我知道currentScore.finalScore仅在使用时更新。但是,我有finalScore=currentScore.finalScore。我的打印行显示它会更新,但看起来是随机数,即使这个数字导致while语句变为false,它也会无限继续 public static void main(String[] args) { Scanner keyboard = new Scanner (Syst

我之前的问题已经解决了。然而,我从另一个类中获取的数据的准确性有问题。我知道currentScore.finalScore仅在使用时更新。但是,我有finalScore=currentScore.finalScore。我的打印行显示它会更新,但看起来是随机数,即使这个数字导致while语句变为false,它也会无限继续

     public static void main(String[] args) {
       Scanner keyboard = new Scanner (System.in); 
       String buddyName;
       String userChoice;
       int maxScore = 10;      
       int minScore = 0;

       System.out.print("Nurse: The Patient's first name is ");
       buddyName = keyboard.nextLine();

       System.out.print("You: Let's see, I should (C)hange " + buddyName + "'s bandages," +
                       "(G)ive " + buddyName + " pain medication, " + 
                    "(A)dd antibiotics to " + buddyName + "'s I.V," +
                    " or (D)ischarge " + buddyName + " ");

      userChoice = keyboard.nextLine();

      Buddy score = new Buddy(userChoice);
      BuddyScore currentScore = new BuddyScore(score);

      int finalScore;             
      do {
         System.out.print("You: Let's see, I should (C)hange " + buddyName + "'s"
                + " bandages, (G)ive " + buddyName + " pain medication, " + 
                    "(A)dd antibiotics to " + buddyName + "'s I.V," +
                    " or (D)ischarge " + buddyName + " ");

          userChoice = keyboard.nextLine();
          score.setUserChoice(userChoice);
          finalScore = currentScore.getFinalScore();
          System.out.println(currentScore.getFinalScore());
          }while (currentScore.getFinalScore() < maxScore && currentScore.getFinalScore() >= minScore);

           System.out.println("Curren score: " + currentScore.getFinalScore());




        }

  }
下面是处理finalScore从中提取的buddyScore的类

public class Buddy {
    private String userChoice;
    public int buddyScore;  


    public Buddy(String userChoice){
        this.userChoice = userChoice;    
    }


    public void setUserChoice(String userChoice){
        this.userChoice = userChoice;
    }


    public String getUserChoice(){
       return userChoice;
    }


    public void setBuddyScore(int buddyScore){
        this.buddyScore = buddyScore;
    }



    public int getBuddyScore(){

      switch (userChoice){
        case "C":
            buddyScore = 1;
            break;
        case "G":
            buddyScore = -2;
            break;
        case "A":
            buddyScore = 3;
            break;
        case "D":
            buddyScore = 7;
            break;
        default:
            buddyScore = 0;
            break;
      };
     return buddyScore;

  }
提前谢谢。

您的while循环错误, 运算符应为&¬||

while(currentScore.getFinalScore()=minScore)

当值大于等于0时,该值始终为真。

您的while循环错误, 运算符应为&¬||

while(currentScore.getFinalScore()=minScore)


当值为0或更高时,这将始终为真。

您的
getFinalScore
方法的副作用是,它在最终返回之前使用
getBuddyScore
的返回值更改
finalScore
。因此,每次调用
getFinalScore
都会增加值。在您的循环中,我看到您四次调用该方法;如果您一步一步地浏览代码,您应该会在同一个迭代中看到四个完全不同的值

我猜你想改做这个

return finalScore + buddy.getBuddyScore();

getFinalScore
方法的副作用是,在最终返回之前,它使用
getBuddyScore
的返回值更改
finalScore
。因此,每次调用
getFinalScore
都会增加值。在您的循环中,我看到您四次调用该方法;如果您一步一步地浏览代码,您应该会在同一个迭代中看到四个完全不同的值

我猜你想改做这个

return finalScore + buddy.getBuddyScore();

我不知道我是怎么忽略了这么简单的事情,我很感激你向我指出这一点。然而,我仍然不确定为什么finalScore会增加用户输入值的倍数。我不确定我怎么会忽略了这么简单的东西,我很感谢你向我指出这一点。然而,我仍然不确定finalScore为什么会增加用户输入值的倍数。我删除了我之前的评论,我发现了这个问题。我创建了一个只返回finalValue的方法。这允许在不添加buddyScore的情况下返回分数。谢谢你的帮助,我真的很感激!我删除了我以前的评论,实际上我发现了这个问题。我创建了一个只返回finalValue的方法。这允许在不添加buddyScore的情况下返回分数。谢谢你的帮助,我真的很感激!