Java while循环中的三个if-case中的一个似乎不起作用,而另外两个呢?

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

我试图用Java编写一个小程序,让用户输入四个字符串(用户名、电子邮件、密码、密码检查)

程序应该在
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。这也是一个未决问题……这也是一个未决问题。。。