初学者Java程序,循环

初学者Java程序,循环,java,loops,Java,Loops,我试图创建一个简单的程序,创建一个随机数,并要求用户猜测。然后它会说更高或更低,直到用户猜对为止。问题是,在用户正确猜测后,程序将继续循环。我认为将代码放在一个单独的方法中,然后在while循环中调用它是可行的,但不幸的是,没有用。谁能建议我如何纠正这一点 下面是我的代码 package main; public class NumberGuesser { public static void main(String[] args) { code mycode = n

我试图创建一个简单的程序,创建一个随机数,并要求用户猜测。然后它会说更高或更低,直到用户猜对为止。问题是,在用户正确猜测后,程序将继续循环。我认为将代码放在一个单独的方法中,然后在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();
也与您的问题无关:

按照一般的编码准则,类名应该是大写的 您不需要每次都实例化扫描仪。如果您尝试您的代码结构,您将能够有更有效的使用。只是一个提示,试着寻找hasNext[…]的方法。 您正在方法体中声明guess,这将隐藏您的实例成员。 尝试删除:

Double guess = input.nextDouble();
。。。并替换为:

guess = input.nextDouble();
也与您的问题无关:

按照一般的编码准则,类名应该是大写的 您不需要每次都实例化扫描仪。如果您尝试您的代码结构,您将能够有更有效的使用。只是一个提示,试着寻找hasNext[…]的方法。 您正在初始化一个与此处字段同名的局部变量。由主类检查的字段永远不会被修改。还有,为什么要用double而不是int来表示猜测


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

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

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

我想你不必在这里讨论一个单独的方法。只需将代码类中的代码放入主方法的无限循环中。这样,当猜测正确时,您可以通过返回来停止程序:

else if (guess == random) {
    System.out.println("Well done");
    return;
}
您的全局值猜测永远不会被赋值,除非它首先从系统中赋值为0作为全局变量。 这是因为您声明了一个局部变量,并且每次都将局部变量而不是全局变量指定为默认java属性。 删除局部变量guess的声明可以解决这个问题。您可以通过其他方式来解决此问题,如使用此函数分配全局值和局部值。guess=guess。

您的全局值guess永远不会被分配值,除非它首先从系统中分配一个0的值作为全局变量。 这是因为您声明了一个局部变量,并且每次都将局部变量而不是全局变量指定为默认java属性。
删除局部变量guess的声明可以解决这个问题。您可以通过其他方式解决这个问题,比如使用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")); 
    }    
}

我认为没有必要再创建一个类。试试看,看看你是怎么想的

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

我认为没有必要再创建一个类。试试看,看看你是怎么想的

不管怎样,欢迎使用编程:@KevinWorkman MVC对于初学者来说有点过分了@Fabinout我很欣赏这些反馈,虽然我同意严格的MVC对于新手来说太难了的一般观点,但教程在进入Java之前通过处理引入OOP。我把它贴在这里是因为即使OP不了解所有内容,他也希望看到程序的基本流程,这正是他在这里感到困惑的地方。无论如何欢迎来到编程:@KevinWorkman MVC对于一个完全初学者来说有点过火@Fabinout我很欣赏这些反馈,虽然我同意严格的MVC对于新手来说太难了的一般观点,但教程在进入Java之前通过处理引入OOP。我把它贴在这里是因为即使OP不了解所有内容,他也希望看到程序的基本流程,这是他在这里所困惑的。这完美地修复了程序。真没想到这么简单!非常感谢你的帮助这完美地修复了程序。真没想到这么简单!非常感谢你的帮助