2015-02-10 105 views
0

返回值执行方法?

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); 
 
    } 
 
}

因此,这是我的程序,我有问题的一小部分是,我的用于numGuesses初始INT(int numGuesses = game(console, r);)正在执行如下所示的游戏方法。 所有我想要的游戏方法是numGuesses的返回值,以便我可以将该值转发到名为stats(numGames,numGuesses,max)的另一种方法; 。我怎样才能使初始值不执行方法,只有do/while循环是? 我产生return语句的方式是否错误?另外,我的返回值并没有保存在我的统计方法中,所以当我运行它时,我得到了错误的答案。

+3

你的方法'max'完全搞砸了......真的。 – 1Darco1 2015-02-10 08:37:44

+0

我没有得到你的统计方法中的行 System.out.println(“guesses/game =”+ numGuesses/numGames/1.0); – 2015-02-10 10:04:33

回答

0

那么你应该把那负责在您将使用两个maingame,例如另一种方法产生numGuesses的代码:你应该熟悉类变量

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 
} 
0

。在班级的顶部,您可以声明一个变量并给它一个值。如果你想从你的课程中的不同方法访问它,那么你应该用numGuesses做什么。这里是Foobar的例子:

class Foo { 

    private int bar = 0; 

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

} 

你只需要注意的是,你不这样做int numGuesses somewehere的方法,因为这将创建第二个本地变量。类变量可以通过名称来访问。


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


最后还有两件小事情。

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

2.)你应该考虑不要让所有东西都是静态的。它显然是这样工作的,但那不是,所谓的面向对象编程