Java while循环中的三个if-case中的一个似乎不起作用,而另外两个呢?
我试图用Java编写一个小程序,让用户输入四个字符串(用户名、电子邮件、密码、密码检查) 程序应该在Java while循环中的三个if-case中的一个似乎不起作用,而另外两个呢?,java,if-statement,while-loop,Java,If Statement,While Loop,我试图用Java编写一个小程序,让用户输入四个字符串(用户名、电子邮件、密码、密码检查) 程序应该在while循环中检查这些字符串是否满足某些条件,循环要求用户输入上述字符串,直到它们满足这些条件 程序将编译,前两个if案例似乎工作正常。只有两个密码(password和passcheck)之间的比较似乎是错误的。即使我输入相同的字符串两次,它们也无法通过比较,我不知道这是为什么 import java.util.Scanner; public class Registry { publ
while
循环中检查这些字符串是否满足某些条件,循环要求用户输入上述字符串,直到它们满足这些条件
程序将编译,前两个if
案例似乎工作正常。只有两个密码(password
和passcheck
)之间的比较似乎是错误的。即使我输入相同的字符串两次,它们也无法通过比较,我不知道这是为什么
import java.util.Scanner;
public class Registry {
public static void main (String [] args){
Scanner scanner = new Scanner(System.in);
// Dialogue for the user to fill
System.out.println("Please enter your username (at least 5 characters)");
String username = scanner.nextLine();
System.out.println("Please enter a valid emailadress (an @ is necessary for it to pass.)");
String email = scanner.nextLine();
System.out.println("Please enter two matching passwords, so we can make sure that you entered them correctly.");
String password = scanner.nextLine();
String passcheck = scanner.nextLine();
boolean user = false;
boolean mail = false;
boolean pass = false;
// Error messages within a loop in order to make the user enter valid arguments.
while (user != true && mail != true && pass != true){
if ((username == "" || username.length() < 5) || (username == " " || username.length() < 5)) {
System.out.println("Username is empty or does not have enough characters! Please enter another.");
username = scanner.nextLine();
}
else{
user = true;
}
if (email.contains("@") == false){
System.out.println("Invalid Mailadress. Please enter again.");
email = scanner.nextLine();
}
else{
mail = true;
}
if(password == passcheck){
pass = true;
}
else if {
System.out.println("Your passwords do not match. Please enter them correctly.");
password = scanner.nextLine();
passcheck = scanner.nextLine();
}
}
}
}
import java.util.Scanner;
公共类注册表{
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
//对话供用户填写
System.out.println(“请输入您的用户名(至少5个字符)”;
字符串用户名=scanner.nextLine();
System.out.println(“请输入有效的电子邮件地址(需要@才能通过”);
字符串email=scanner.nextLine();
System.out.println(“请输入两个匹配的密码,这样我们可以确保您输入的密码正确。”);
字符串密码=scanner.nextLine();
字符串passcheck=scanner.nextLine();
布尔用户=false;
布尔邮件=false;
布尔传递=假;
//循环中的错误消息,以使用户输入有效参数。
while(user!=true&&mail!=true&&pass!=true){
if((username==“”| | username.length()<5)| |(username==“”| | username.length()<5)){
System.out.println(“用户名为空或没有足够的字符!请输入另一个。”);
用户名=scanner.nextLine();
}
否则{
user=true;
}
if(email.contains(“@”)==false){
System.out.println(“无效邮箱,请重新输入”);
email=scanner.nextLine();
}
否则{
mail=true;
}
如果(密码==密码检查){
通过=正确;
}
否则如果{
System.out.println(“您的密码不匹配,请正确输入。”);
密码=scanner.nextLine();
passcheck=scanner.nextLine();
}
}
}
}
使用==
可以比较对象引用,而不是值
此外,您可以简化此操作:
if ((username == "" || username.length() < 5) || (username == " " || username.length() < 5)) {
if((username==“”| | username.length()<5)| |(username==“”| | username.length()<5)){
到
if(username.trim().length()<5){
使用==
可以比较对象引用,而不是值
此外,您可以简化此操作:
if ((username == "" || username.length() < 5) || (username == " " || username.length() < 5)) {
if((username==“”| | username.length()<5)| |(username==“”| | username.length()<5)){
到
if(username.trim().length()<5){
您正在使用=
而不是equals
来比较字符串
尝试使用类似以下内容:
"".equals(username) //...
您正在使用=
而不是equals
来比较字符串
尝试使用类似以下内容:
"".equals(username) //...
除了错误的字符串比较之外,循环中还有另一个问题
while (user != true && mail != true && pass != true)
表示一旦三个布尔标志中的任何一个为真,循环将终止
你想要的可能是
while (user != true || mail != true || pass != true)
这意味着只有当所有三个标志都为真时,循环才会终止
或者更好:
while (!user || !mail || !pass)
除了错误的字符串比较之外,循环中还有另一个问题
while (user != true && mail != true && pass != true)
表示一旦三个布尔标志中的任何一个为真,循环将终止
你想要的可能是
while (user != true || mail != true || pass != true)
这意味着只有当所有三个标志都为真时,循环才会终止
或者更好:
while (!user || !mail || !pass)
我明白了。非常感谢!不是username.trim()<5)
,因为零小于5。我明白了,就是这样。非常感谢!没有username.trim().length()<5
cover”.equals(username.trim())
?不,我会说username.trim().length()=0 cover.equals。我的意思是,(“”.equals(username.trim())| username.trim().length().length()<5))
在逻辑上只相当于(username.trim().length()<5)
,因为零小于5。这也是一个未决问题……这也是一个未决问题。。。