返回执行方法的值?

时间:2015-02-10 07:49:34

标签: java return



import java.util.*;

public class Guess {
   public static void main(String[] args) {
      Scanner console = new Scanner(System.in);
      Random r = new Random();
      intro();
      int numGames = 0;
      int numGuesses = game(console, r);
      int max = max(numGuesses);
      String again = "y";
      do {
         game(console, r);
         System.out.println("Do you want to play again?");
         again = console.next();
         System.out.println();
         numGames++;
      } while (again.startsWith("y") || again.startsWith("Y"));
      stats(numGames, numGuesses, max);
   }

   public static void intro() {...}
   
   public static int game(Scanner console, Random r) {
      System.out.println("I'm thinking of a number between 1 and 100...");
      int answer = r.nextInt(100) + 1;
      System.out.println("answer = " + answer);
      int guess = -1;
      int numGuesses = 0;
      while (answer != guess) {
         System.out.print("Your guess? ");
         guess = console.nextInt();
         numGuesses++;   
         if (guess > answer) {
            System.out.println("It's lower.");
         } else if (guess < answer) {
            System.out.println("It's higher.");
         } else {
            System.out.println("You got it right in " + numGuesses + " guesses");
         }
         max(numGuesses);
      }
      return numGuesses;
   }
   
   public static int max(int numGuesses) {
      int max = numGuesses;
      if (max > numGuesses) {
         max = numGuesses;
      }
      return max;
   }
   
   public static void stats(int numGames, int numGuesses, int max) {
      System.out.println("Overall results:");
      System.out.println("    total games   = " + numGames);
      System.out.println("    total guesses = " + numGuesses);
      System.out.println("    guesses/game  = " + numGuesses / numGames / 1.0);
      System.out.println("    best game     = " + max);
   }
}
&#13;
&#13;
&#13;

所以这只是我程序的一小部分,而我遇到的问题是我的numGuesses(int numGuesses = game(console, r);)的初始int正在执行下面显示的游戏方法。 我想从游戏方法中得到的只是numGuesses的返回值,这样我就可以将值转发到另一个名为stats的方法(numGames,numGuesses,max); 。如何使初始值不执行该方法只有do / while循环? 我生成return语句的方式是错误的吗?此外,我的返回值不能保存在我的统计数据方法中,所以当我运行它时,我得到了错误的答案。

2 个答案:

答案 0 :(得分:0)

然后,您应该将负责生成numGuesses的代码放在您将在maingame上使用的另一种方法中,例如:

public static int game(Scanner console, Random r) {
    int numGuesses = getNumberOfGuesses(..);
    //continue implementation here
}

public static void main(String[] args) {
    int numGuesses = getNumberOfGuesses(..);
    //use value 
}

答案 1 :(得分:0)

你应该熟悉类变量。在类的顶部,您可以声明一个变量并为其赋值。如果您想从类中的不同方法访问它,那么您应该使用numGuesses。这是Foobar的例子:

class Foo {

    private int bar = 0;

    private void foobar(int arg) {...}

}

您只需要注意,您不会在方法中int numGuesses创建第二个本地变量。只能通过名称访问类变量。


接下来,您要跟踪所玩的总游戏数和总猜测数。您现在可以猜测(哈哈哈),您也需要使用类变量。如果你需要跟踪总猜测,即使程序重新启动,你需要将这些值存储在一个文件中,但这将是另一次。


最后,还有两件小事。

1。)方法max。我不知道max应该做什么,但目前它只是返回传递给它的值。 if语句也将从不执行(x不能高于x)。

2。)你应该考虑不要让一切都变得静止。它显然是这样的,但事实并非如此,所谓的面向对象编程