作为一个自我指定的练习,我正在尝试编写一个生日的简单程序,并确定给定日期所在的星期几。该计划的第一部分决定了这一年。我正在使用扫描仪收集用户输入,然后使用do-while循环来测试输入是否可用(必须是数字,必须有四位数),如果输入不符合标准,则重复。我试图进入1998年,这显然是一个数字和四位数,它重复循环,好像我的输入无效。我认为在我的do-while循环中某处存在问题,但我无法确定它是什么。这是有问题的代码。
public static boolean isInteger(String input)
{
try
{
Integer.parseInt(input);
return true;
}
catch(Exception e)
{
return false;
}
}
public static void main(String[] args)
{
String year = "";
String yearcorrect = "";
int ylength = year.length();
boolean yearIsYear = true;
Scanner scan = new Scanner(System.in);
do
{
System.out.println("Please enter the year of your birth.");
year = scan.nextLine();
boolean yearIsNum = isInteger(year);
if (yearIsNum = false || ylength != 3)
{
System.out.println("Input is not a valid year.");
yearIsYear = false;
}
else
{
System.out.println("You entered the year " + year + ". Is this correct?");
yearIsYear = true;
yearcorrect = System.console().readLine();
}
}
while (yearcorrect != "yes" && yearIsYear != true);
答案 0 :(得分:0)
第一个错误:
if (yearIsNum = false || ylength != 3)
应该是
if (yearIsNum = false || ylength != 4)
第二个错误:
正如@ChiefTwoPencils所指出的,yearIsNum = false
会将false
分配给yearIsNum
,条件永远不会通过。通常java保护我们免受所有类型的错误,除了...布尔。为了避免将来出现此类错误(并使代码更具可读性),您只需使用!yearIsNum
代替yearIsNum == false
或反转值的顺序 - >把常数放在第一位:false == yearIsNum
- >这样,如果你错过=
,那么编译器会给你一个错误。我个人更喜欢!yearIsNum
,因为它更短,更易读。
第三个错误
您错误地比较字符串。您必须使用str1.equals(str2)
。对==
使用对象(和字符串是对象)比较它们的引用,而不是它们的值。
例如"a" == new String("a")
将等于false