繁体   English   中英

初学者Java程序循环

[英]Beginner Java program, 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"); 
        }
    }   
}

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

Double guess = input.nextDouble();

...并替换为:

guess = input.nextDouble();

也与您的问题无关:

  • 按照通用的编码准则,类名称应为CamelCase
  • 您无需每次都实例化Scanner 如果您尝试使用代码结构,则可以提高使用效率。 只是一个提示,请尝试查找ScannerhasNext[...]方法。
Double guess = input.nextDouble();

您正在初始化一个本地变量,该变量与此处的字段同名。 由主类检查的字段永远不会被修改。 另外,为什么要使用双精度而不是整数呢?

我认为您不必在这里使用其他方法。 只需将代码类中的代码放入无限循环的主方法中即可。 这样,您将可以通过返回正确的猜测来停止程序:

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

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

我对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")); 
    }    
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM