代码检查string invemail中的字符(“sammy99gmail.com”)。注意电子邮件如何丢失“@”符号,该程序应该告诉它是否存在,如果是,打印invemail“是有效的电子邮件”,否则invemail“无效”。
问题是我在第二个'if'语句的'emailfound'处突出显示错误。我做错了什么?
代码:
String invemail = "sammy99gmail.com";
for (int i = 0; i < invemail.length(); i++)
{
char emailfind = invemail.charAt(i);
if (emailfind == '@')
{
boolean emailfound = true;
}
else
{
boolean enotfound = false;
}
}
if (emailfound = true)
{
System.out.println(invemail + "is a valid email");
}
else
{
System.out.println(invemail + "is invalid");
}
答案 0 :(得分:4)
如果找不到@符号,则根本不会声明布尔值的emailfound!因此,编译器会给出一个错误,说明在代码的那一部分可能没有emailfound。要解决这个问题,只需在第一个if语句之外声明布尔值,以便在达到第二个if语句时它仍然存在:
boolean emailfound = false;
for(int i = 0; i < invemail.length(); i++)
//etc
默认情况下将其设置为false,这意味着当找不到@符号时,您不需要将其设置为false,因此您不需要此处的else。请注意,当您找到@时,您应该为emailfound分配true而不声明新的emailfound = true;
而不是boolean emailfound = true;
,因为这会导致重复的局部变量出错。
我发现的另一件事是在第二个if语句中:if (emailfound = true)
。小心点!您使用=
代替==
,这意味着它实际上将<{em>}值<{1}}分配给emailfound而不是评估它是否等于true
!实际上你根本不需要比较它,if语句需要一个boolean和emailfound 是一个布尔值。最好是true
而不是if(emailfound)
,以避免这种错误。
答案 1 :(得分:0)
您在if语句中声明emailfound
。通过这样做,变量是该语句中可见的变量。由于您在代码的其他部分访问emailfound
,因此您得到的错误是因为该变量未被全局声明。
更改为:
String invemail = "sammy99gmail.com";
boolean emailfound = false;
boolean enotfound = false;
for (int i = 0; i < invemail.length(); i++)
{
char emailfind = invemail.charAt(i);
if (emailfind == '@')
{
emailfound = true;
}
else
{
enotfound = false;
}
}
答案 2 :(得分:0)
您可以使用布尔值使用标签来编写此内容。
String invemail = "sammy99gmail.com";
found: {
for (int i = 0; i < invemail.length(); i++) {
char emailfind = invemail.charAt(i);
if (emailfind == '@') {
System.out.println(invemail + "is a valid email");
break found;
}
}
System.out.println(invemail + "is invalid");
}
您可以通过定义执行检查的方法来避免使用标签。