Java简单的登录系统使用for循环



我正在尝试学习循环的工作原理,这是我写的一个非常简单的登录系统。尽管此代码似乎存在错误

import java.util.Scanner;
public class Main {
static String password, loginPass, username, loginUser;
static Scanner sc = new Scanner(System.in);
static boolean login = true;
static boolean checkvalid = false;
public static void main(String[] args) {
    System.out.println("Enter a desired username: n");
    username = sc.nextLine();
    System.out.println("Enter a desired password: n");
    password = sc.nextLine();
    System.out.println("Thank you, please log in.n");
    while (login) {
        checkvalid = false;
        System.out.println(" ------------------ n" + "Username: n");
        loginUser = sc.nextLine();
        System.out.println("Password: n");
        loginPass = sc.nextLine();
        if (loginUser.equals(password) && (loginPass.equals(username))) {
            checkvalid = true;
        } else {
            checkvalid = false;
        }
    }
    for (;;){
        if (checkvalid = true){
            login = false;
            System.out.println("You have logged in.");
        }else if (checkvalid = false){
            System.out.println("Incorrect username or password");
            login = true;
        }
    }
}
}

它反复要求我以前输入的"所需登录凭据"。请帮助我解决这个问题,谢谢!(

您永远卡在第一个循环中,因为您永远不会更改登录值。第二个循环也不需要,您可以将代码移至时循环中的条件中。尝试以下内容。

public static void main(String[] args) {
    System.out.println("Enter a desired username: n");
    username = sc.nextLine();
    System.out.println("Enter a desired password: n");
    password = sc.nextLine();
    System.out.println("Thank you, please log in.n");
    while (login) {
        checkvalid = false;
        System.out.println(" ------------------ n" + "Username: n");
        loginUser = sc.nextLine();
        System.out.println("Password: n");
        loginPass = sc.nextLine();
        if (loginUser.equals(username) && (loginPass.equals(password))) {
            checkvalid = true;
            login = false;
            System.out.println("You have logged in.");
        } else {
            checkvalid = false;
            System.out.println("Incorrect username or password");
        }
    }
}

while (login)执行while循环的主体,直到login为false。段环的身体是在闭合卷曲支架上结束的部分。就您而言,这是身体的最后陈述:

    if (loginUser.equals(password) && (loginPass.equals(username))) {
        checkvalid = true;
    } else {
        checkvalid = false;
    }

执行此if之后,程序循环回到while循环主体的开头。它永远不会进入代码的其余部分(for(;;)或打印"您已登录"的代码(,直到login变为false(或有break语句(。而且您永远不会将login设置为while循环中的false。唯一的位置login设置为false,位于while循环主体之外,只要您的程序粘在While Loop内,它就永远不会到达那里。

您可能想要将login设置为false的代码 while循环 - 而不是单独的循环中:

while (login) {
    checkvalid = false;
    System.out.println(" ------------------ n" + "Username: n");
    loginUser = sc.nextLine();
    System.out.println("Password: n");
    loginPass = sc.nextLine();
    if (loginUser.equals(password) && (loginPass.equals(username))) {
        checkvalid = true;
    } else {
        checkvalid = false;
    }
    if (checkvalid == true){
        login = false;
        System.out.println("You have logged in.");
    }else if (checkvalid == false){
        System.out.println("Incorrect username or password");
        login = true;
    }
}

[我还修复了您犯的if (checkvalid = true)错误,如评论中所述。不过,这最后可以简化:

    if (checkvalid) {  // you never have to use "== true" to check a boolean
        login = false;
        System.out.println("You have logged in.");
    }else {  // if we get here, checkvalid has to be false, no need to test it again
        System.out.println("Incorrect username or password");
        login = true;
    }

还有其他方法可以更简化这一点,但这足以简化一个答案。]

我想知道为什么您将usernameloginPasspasswordloginUser进行比较,可能就是您想要的。我只是建议您省略checkvalid。你可以做这样的事情

static boolean login = false;
while (!login) {
      System.out.println(" ------------------ n" + "Username: n");
      loginUser = sc.nextLine();
      System.out.println("Password: n");
      loginPass = sc.nextLine();
      if (loginUser.equals(password) && (loginPass.equals(username))) {
          System.out.println("You have logged in.");
          login = true;
      }
      else {
          System.out.println("Incorrect username or password");
      }
}

尝试将该登录名保持为false,直到登录成功为止,因为在您之后,您会发现它令人困惑。

尝试一下:D

           Scanner sc = new Scanner(System.in);
            String x = sc.nextLine();// Put the user
            while(!x.equals("John")) {                  
                System.out.println("Wrong User, try again :D"); 
                x = sc.nextLine();
            }
            sc.close();

最新更新