0

我有这个问题,我创建了两种验证用户输入的方法。然后我试图在程序的其余部分运行之前让他们的输入进行验证。它不起作用,我在网上找不到任何有用的东西。

我在另一个程序中以完全相同的方式完成了它,但它在这个程序中不起作用。任何帮助将非常感激。

(主要部分被注释掉,因为我试图让它运行)......

    import java.util.*;




public class GuessingGame {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub



    int answer;
    int tries = 0;
    answer = (int) (Math.random() * 99 + 1);



    System.out.println("Welcome to the Guess the Number Game ");
    System.out.println("+++++++++++++++++++++++++++++++++++++ \n");
    System.out.println("I'm thinking of a number between 1-100 ");
    System.out.println("Try to guess it! ");

    Scanner sc = new Scanner(System.in);
    String choice = "y";

while (choice.equalsIgnoreCase("y"))    
{



        int guess = getIntWithinRange(sc, "Enter number: ", 0, 100);




        /**

        if (guess == answer) 
        {
            System.out.println("Your guess is correct! Congratulations!");
        }
        else if (guess > answer + 10)
            { System.out.println("Your guess was way too high");
            tries++;
            }

        else if (guess < answer)
            { System.out.println("Your guess was too low. Try again. ");
            tries++;
            }

        else if (guess > answer)
            {System.out.println("Your guess was too high. Try again.");
            tries++;
            }



                System.out.println("The number was " + answer + " !");
                System.out.println("You guessed it in " + tries + " tries");

                    if (tries < 2)
                        {System.out.println("That was lucky!");
                        }

                    if (tries >=2 && tries <=4)
                        {System.out.println("That was amazing!");
                        }

                    if (tries > 4 && tries <= 6)
                        {System.out.println("That was good.");
                        }

                    if (tries >= 7 && tries <=7)
                        {System.out.println("That was OK. ");
                        }

                    if (tries > 7 && tries < 10)
                        { System.out.println("That was not very good. ");
                        }

                    if (tries >= 10)
                        {System.out.println("This just isn't your game. ");
                        }
                **/ 

                      //ask if they want to continue
                    System.out.println("\n Continue (y/n)? ");
                    choice = sc.next();
                    sc.nextLine();
                    System.out.println();

    }

    //print out thank you message
    System.out.println("Thanks for finding the common divisor ");
    sc.close();
}

public static int getInt(Scanner sc, String prompt)
{
    int i = 0;
    boolean valid = false;

    while(valid == false);
    {   
        System.out.println(prompt);
        if (sc.hasNextInt())
        {
            i = sc.nextInt();
            valid = true;
        }
        else
        {
            System.out.println("Please enter a number... ");
        }
        sc.nextLine();
    }
    return i;

}








public static int getIntWithinRange(Scanner sc, String prompt, int min, int max)
{
    int i = 0;
    boolean valid = false;

    while (valid == false)
    {
        i = getInt(sc, prompt);
        if (i <= min || i >= max)
            System.out.println("Number must be between 1-100 ");
        else
            valid = true;
    }
    return i;
}

}

4

2 回答 2

4

在方法getInt()中,这将导致一个无限循环:

boolean valid = false;

while(valid == false);
{

由于尾随分号:删除它。尾随分号while相当于:

while (valid == false) {}

这意味着预期的循环体永远不会执行,并且值valid永远不会改变。

于 2012-10-03T07:31:35.767 回答
1

虽然你的问题已经解决了,但我想指出一些关于你的代码的事情。

首先,您的代码有很多重复性..

您的方法: - getIntWithinRange只是将您的请求委托给另一个方法getInt,我认为这没用..
您在getInt方法中拥有的一切,您可以简单地将其移至getIntWithinRange方法..这样您就不会创建2 boolean变量,2 while loops等等重复代码..

此外,您不需要检查布尔值,例如:-

while (valid == false)   // Not needed
while (!valid)      // is enough

此外,您还可以拥有您的Scanner sc = new Scanner(System.in);作为您的实例变量..您不需要在您正在阅读用户输入的所有方法中定义它..实际上您不是..您只是在复制它..

在您评论的代码中: -

if (tries >= 7 && tries <=7)

相当于: -

if (tries == 7)

在你的主要方法中: -

System.out.println("\n Continue (y/n)? ");
choice = sc.next();
sc.nextLine(); --> // You don't need this line at all.. 
                   // It is just used to read user input.. 
                   // That you are doing in your `getIntWithinRange` method..
System.out.println();

在您的 getInt 方法中:-

    else {
          System.out.println("Please enter a number... ");
    }
    sc.nextLine(); -->  // This should be sc.next().. And should be inside else
                        // You are just getting a new user input.. not required here..
                        // Just move the pointer to next input.. But don't read it..
于 2012-10-03T07:37:12.077 回答