Can';Java中的t调用验证方法

Can';Java中的t调用验证方法,java,Java,我有这个问题,我创建了两个方法来验证用户的输入。然后,我试图让他们的输入在程序的其余部分运行之前进行验证。它不起作用,我在网上找不到任何有帮助的东西 我在另一个程序中使用了完全相同的方法,但在这个程序中它不起作用。任何帮助都将不胜感激 (主要部分被注释掉了,因为我试图让它运行) import java.util.*; 公开课猜谜游戏{ /** *@param args */ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 int答案; int=0; 答案=(i

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

我在另一个程序中使用了完全相同的方法,但在这个程序中它不起作用。任何帮助都将不胜感激

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

import java.util.*;
公开课猜谜游戏{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
int答案;
int=0;
答案=(int)(Math.random()*99+1);
System.out.println(“欢迎来到猜数字游戏”);
System.out.println(“+;
System.out.println(“我想的是一个介于1-100之间的数字”);
System.out.println(“试着猜吧!”);
扫描仪sc=新的扫描仪(System.in);
字符串选择=“y”;
while(choice.equalsIgnoreCase(“y”))
{
int guess=getIntWithinRange(sc,“输入数字:”,0,100);
/**
如果(猜测=答案)
{
System.out.println(“您的猜测是正确的!祝贺您!”);
}
否则如果(猜测>回答+10)
{System.out.println(“你的猜测太高了”);
尝试++;
}
else if(猜测<回答)
{System.out.println(“您的猜测太低,请再试一次”);
尝试++;
}
else if(猜测>回答)
{System.out.println(“您的猜测太高了,再试一次。”);
尝试++;
}
System.out.println(“编号为“+answer+”!”);
System.out.println(“您在“+trys+”trys”中猜到了”);
如果(尝试次数<2)
{System.out.println(“太幸运了!”);
}
如果(尝试次数>=2和尝试次数4和尝试次数=7和尝试次数7和尝试次数<10)
{System.out.println(“那不是很好。”);
}
如果(尝试次数>=10)
{System.out.println(“这不是你的游戏。”);
}
**/ 
//询问他们是否想继续
System.out.println(“\n是否继续?”);
choice=sc.next();
sc.nextLine();
System.out.println();
}
//打印出感谢信
System.out.println(“感谢您找到公约数”);
sc.close();
}
公共静态int getInt(扫描程序sc,字符串提示)
{
int i=0;
布尔有效=假;
while(valid==false);
{   
System.out.println(提示);
if(sc.hasnetint())
{
i=sc.nextInt();
有效=真;
}
其他的
{
System.out.println(“请输入一个数字…”);
}
sc.nextLine();
}
返回i;
}
公共静态整型整型getIntWithinRange(扫描程序sc、字符串提示、整型最小值、整型最大值)
{
int i=0;
布尔有效=假;
while(valid==false)
{
i=getInt(sc,提示符);
如果(i=最大值)
System.out.println(“数字必须介于1-100之间”);
其他的
有效=真;
}
返回i;
}
}

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

boolean valid = false;

while(valid == false);
{
由于尾随分号:将其删除。尾随分号使
while
相当于:

while (valid == false) {}
这意味着永远不会执行预期的循环体,并且永远不会更改
valid
的值。

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

boolean valid = false;

while(valid == false);
{
由于尾随分号:将其删除。尾随分号使
while
相当于:

while (valid == false) {}

这意味着不会执行预期的循环体,也不会更改
valid
的值。

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

首先,你的代码有太多的两面性

您的方法:-
getIntWithinRange
只是将您的请求委托给另一个方法,我认为这是无用的
getInt
方法中,您只需将其移动到
getIntWithinRange
方法即可。。这样,您就不会创建
2个布尔变量、
2个while循环以及如此多的重复代码

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

while (valid == false)   // Not needed
while (!valid)      // is enough
此外,您还可以使用
扫描仪sc=新扫描仪(System.in)作为实例变量。。您不需要在所有读取用户输入的方法中定义它。。事实上你不是。。你只是在复制它

在您的注释代码中:-

if (tries >= 7 && 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..

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

首先,你的代码有太多的两面性

您的方法:-
getIntWithinRange
只是将您的请求委托给另一个方法,我认为这是无用的
getInt
方法中,您只需将其移动到
getIntWithinRange
方法即可。。这样,您就不会创建
2个布尔变量、
2个while循环以及如此多的重复代码

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

while (valid == false)   // Not needed
while (!valid)      // is enough
此外,您还可以使用
扫描仪sc=新扫描仪(System.in)作为实例变量。。您不需要在所有读取用户输入的方法中定义它。。实际上