java - while 循环中的三种 if - 情况之一似乎不起作用,而另外两种情况呢?

标签 java if-statement while-loop

<分区>

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

程序应该在 while 循环中检查这些字符串是否满足某些条件,该循环要求用户输入上述字符串,直到它们满足这些条件。

程序编译成功,前两个 if 情况似乎运行良好。只有两个密码(passwordpasscheck)之间的比较似乎是错误的。即使我两次输入相同的字符串,它们也没有通过比较,我不知道这是为什么。

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();
            }
        }

    }
}

最佳答案

if(password.equals(passcheck)){
        pass = true;
    }

使用 == 比较对象引用而不是值。

此外你可以简化这个:

if ((username == "" || username.length() < 5) || (username == " " || username.length() < 5)) {

if (username.trim().length() < 5) {

关于java - while 循环中的三种 if - 情况之一似乎不起作用,而另外两种情况呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823607/

相关文章:

java - 无法检索作业,因为未找到所需的类,即使之前的触发器已成功触发

java - Java Fragment 中的 RecyclerView 与 ViewModel

java - 关系和建立数据库

python - Python 语句中的 if-else 子句

java - java中一个变量是否可以有多个潜在值

java - 如何使用 Apache-POI api for java (MS-Word) 在后续页面上重复 XWPFTable header

iOS if conditional 似乎没有按预期进行评估。愚蠢的错误或有趣的事情?

java - 如何让 switch 语句在 Java 中继续运行

php - 带有 mysql_fetch_array 的嵌套 While 循环给出空白结果

c - 为什么 while 语句的 "or"部分不起作用,但break语句却起作用?(对于 C)