【问题标题】:using a method return in java在java中使用方法返回
【发布时间】:2016-12-16 17:30:40
【问题描述】:

我是 Java 和整体编程的新手,所以请多多包涵。在下面的代码中,当我运行 object.ValidateGuess() 时,我被提示 3 次“请输入要猜测的字母:”。这是为什么?是不是因为我在 if 语句中使用了 GetGuess() 方法?我只想使用该方法的返回,而不是让它每次都运行。 提前感谢

public char GetGuess(){
    System.out.println("Please enter a letter to be guessed");
    Scanner guess = new Scanner(System.in);
    return guess.nextLine().charAt(0);
}

public boolean ValidateGuess(){
    boolean isHit = false;
    int triesLeft = MAX_TRIES;
    if (mCorrectAnswer.indexOf(GetGuess()) < 0 ){
        System.out.println("Your guess was incorrect");
        triesLeft -= 1;
        System.out.println(triesLeft);
        mMisses += GetGuess();
    } else if (GetGuess() == (int)GetGuess()) {
        System.out.println("you have to input a letter!!!");
    } else {
        mHits += GetGuess();
        isHit = true;
    }

【问题讨论】:

  • 然后将返回值放入一个变量中,并让if 条件涉及该变量,而不是调用方法本身。方法调用就是这样:它调用方法。
  • 因为该方法同时在 if 条件和 else 条件下执行。

标签: java if-statement methods return


【解决方案1】:

你多次调用该方法,

if (mCorrectAnswer.indexOf(GetGuess()) < 0 ){
        [...]
        mMisses += GetGuess();
} else if (GetGuess() == (int)GetGuess()) {
        [...]
} else {
        mHits += GetGuess();
}

这意味着您多次调用一个唯一的字母

通过将GetGuess() 存储在变量中并重新调整来解决此问题:

char guess = GetGuess();
if (mCorrectAnswer.indexOf(guess) < 0 ){
        [...]
        mMisses += guess;
} else if (guess == (int)guess) {
        [...]
} else {
        mHits += guess;
}

如果有帮助,请记住,每次调用函数时,每次都会在该函数中执行每一行,而不管您调用它的方式、地点、时间和原因。一个方法有一个工作,从字面上看,就是运行它的方法。

【讨论】:

    【解决方案2】:

    没错。尝试存储该值,而不是一次又一次地调用该函数。

    public boolean ValidateGuess(){
        boolean isHit = false;
        int triesLeft = MAX_TRIES;
        char guess = GetGuess();
        if (mCorrectAnswer.indexOf(guess) < 0 ){
            System.out.println("Your guess was incorrect");
            triesLeft -= 1;
            System.out.println(triesLeft);
            mMisses += guess;
        } else if (guess == (int)guess) {
            System.out.println("you have to input a letter!!!");
        } else {
            mHits += guess;
            isHit = true;
    }
    

    【讨论】:

      【解决方案3】:

      在您的 if 条件下,您每次都调用GetGuess,因此用户必须一次又一次地进行输入。您必须保存来自 GetGuess 的值并使用它。

      (顺便说一句:方法名最好不要以大写字母开头)。

      你可以把你的代码改成这样:

      public char GetGuess(){
          System.out.println("Please enter a letter to be guessed");
          Scanner guess = new Scanner(System.in);
          return guess.nextLine().charAt(0);
      }
      
      public boolean ValidateGuess(){
          boolean isHit = false;
          int triesLeft = MAX_TRIES;
          char guessValue = GetGuess(); //Here you store the guess and now you can work with that in your if conditions
          if (mCorrectAnswer.indexOf(guessValue) < 0 ){
              System.out.println("Your guess was incorrect");
              triesLeft -= 1;
              System.out.println(triesLeft);
              mMisses += guessValue;
          } else if (guessValue == (int)guessValue) {
              System.out.println("you have to input a letter!!!");
          } else {
              mHits += guessValue;
              isHit = true;
          }
      

      【讨论】:

        【解决方案4】:

        您可能应该执行一次 GetGuess(),然后将结果存储在一个变量中。在以下语句中,您可以检查此变量:

        char guessResult = GetGuess();
        if (mCorrectAnswer.indexOf(guessResult) < 0){
            System.out.println("Your guess was incorrect");
            triesLeft -= 1;
            System.out.println(triesLeft);
            mMisses += guessResult;
        } else if (guessResult == (int)guessResult) {
            System.out.println("you have to input a letter!!!");
        } else {
            mHits += guessResult;
            isHit = true;
        }
        

        【讨论】:

          【解决方案5】:

          是的,这是因为每次将方法放入 if 条件时都会调用该方法。尝试将方法的返回值存储在一个变量中,并改用该变量。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-20
            • 1970-01-01
            • 2015-05-13
            • 2023-01-07
            • 2015-12-07
            • 2014-09-05
            • 2021-09-04
            • 1970-01-01
            相关资源
            最近更新 更多