初学Java程序,循环

时间:2014-01-30 17:27:35

标签: java loops

我正在尝试创建一个简单的程序,它创建一个随机数并要求用户猜测。然后它会说更高或更低,直到用户猜对了。问题是,在用户猜对后,程序将继续循环。我认为将代码放入一个单独的方法然后在while循环中调用它会起作用但不幸的是它无济于事。谁能建议我怎么纠正这个?

以下是我的代码。

package main;
public class NumberGuesser {


    public static void main(String[] args) {
        code mycode = new code();
        while (mycode.guess != mycode.random){
            mycode.codebit();      
        }
    }

}


package main;
import java.util.Random;
import java.util.Scanner;


public class code {


    Random rand = new Random();     
    int random = rand.nextInt(1000);
    double guess;

    public void codebit(){

        System.out.println("Guess the number"); 
        Scanner input = new Scanner(System.in);
        Double guess = input.nextDouble();
        if (guess > random){
            System.out.println("Lower");    
        }
        else if (guess < random){
            System.out.println("Higher");   
        }
        else if (guess == random){
           System.out.println("Well done"); 
        }
    }   
}

5 个答案:

答案 0 :(得分:4)

您在方法正文中重新声明guess,隐藏了您的实例成员。 尝试删除:

Double guess = input.nextDouble();

...并替换为:

guess = input.nextDouble();

与您的问题无关:

  • 作为一般编码指南,类名应为CamelCase
  • 您不需要每次都实例化Scanner。如果您尝试使用代码结构,那么您将能够更有效地使用它。只需提示,请尝试查找ScannerhasNext[...]方法。

答案 1 :(得分:0)

Double guess = input.nextDouble();

您正在初始化一个与此处字段同名的局部变量。由主类检查的字段永远不会被修改。另外,为什么你使用double而不是int来猜测?

答案 2 :(得分:0)

我认为你不必在这里采用单独的方法。只需将代码类中的代码放入main方法中,就可以进入无限循环。这样,您就可以通过在猜测正确时返回来停止程序:

else if (guess == random) {
    System.out.println("Well done");
    return;
}

答案 3 :(得分:0)

您的全局值 guess 永远不会被赋值,除非它首先从系统中将值(即0)指定为全局变量。
这是因为您声明了一个局部变量并且每次都将本地变量指定为全局变量作为默认java属性 删除局部变量 guess 的声明可以解决该问题。您可以使用 this.guess = guess 来解决其他使用本地分配全局的方法。

答案 4 :(得分:0)

我也是Java的新手,但我会保持简单并按照这样做:

package main;
import java.util.Random;
import java.util.Scanner;

public class GuessNumber {

    public static void main(String[] args) {

        Random rand = new Random(); 
        Scanner input = new Scanner(System.in);    
        int guess;
        int randomNum;
        String answer = "";

        System.out.println("~ WELCOME! ~");
        System.out.println("Can you guess the secret number?");

        do {
            System.out.print("\nPicking a number between 1-1000........ ");
            randomNum = rand.nextInt(1000)+1; //number will be between 1-1000

            System.out.println("Done!");
            System.out.print("\nGuess the number: ");

            guess = input.nextInt();

            while(guess<1 || guess>1000) {
                System.out.println("\nOut of range! Try again.");
                System.out.print("Your guess: ");
                guess = input.nextInt();
            }

            if(guess==randomNum)
                System.out.print("You were right!");

            else 
                System.out.println("\nWrong! Better luck next time.");  

            System.out.println("\nThe secret number was " + randomNum + ".");
            System.out.println("Your guess was " + guess + ".");

            System.out.print("\nPlay again (yes/no)? ");
            answer = input.next();

            if(answer.equalsIgnoreCase("no")) {
                System.out.print("\nThanks for playing!");
                input.close();
                System.exit(0);
            }

        }while(answer.equalsIgnoreCase("yes")); 
    }    
}

我认为没有必要创建另一个类。试一试,看看你的想法!