正在跳过System.out.println()

时间:2012-11-29 22:35:25

标签: java

我的提示"请输入您的ID"在第二个for循环没有出现之后,它会直接进入"请输入您的密码。"它还会从登录提示中跳过很多代码到密码提示。如果您对此行为有任何想法,请与我分享,谢谢。

public void main(String[] args){

    Accounts Accounts = new Accounts();

    Scanner kb = new Scanner(System.in);

    System.out.print("Please create a login ID and hit \"ENTER\": ");
    Login = kb.nextLine();

    for(;;){
        if(!Accounts.isTaken(Login)){
            System.out.print("Please create a password and hit \"ENTER\": ");
            PW = kb.nextLine();
            if(Accounts.validPW(PW)){
                Accounts.createAccount(Login, PW);
                break;
            }
        }
    }

    System.out.print("Do you wish to Log in ? (Y/N): ");
    String response = kb.nextLine();
    if((response=="y")||(response=="Y")){
        for(;;){
           //Not Being Shown
            System.out.println("Please enter your ID: "); // ?????? Where are you?????
            Login = kb.nextLine();
            Accounts.login(Login);
            //Goes straight here
            System.out.print("Please enter your Password: ");
            if ((Accounts.isValid(Login))&&(Accounts.checkAuth(kb.nextLine()))){
                break;
            }
            else{
                System.out.println("Invalid Login-Password!");
            }
        }
    }
    System.out.println("Please enter your Password: ");
    System.out.println("LOGIN AUTHORIZED: "+Accounts.checkAuth(kb.nextLine()));
 }

3 个答案:

答案 0 :(得分:4)

而不是

(response=="y")||(response=="Y")

使用

(response.equals("y"))||(response.equals("Y"))

答案 1 :(得分:3)

您正在使用==运算符来检查字符串相等性。使用equals() method

==运营商:

  1. 对于原始变量,检查两个基元是否具有相同的值。
  2. 对象:检查两个引用变量是否指向(引用)同一对象。
  3. equals() method

    1. 检查两个对象是否有意义相等。

      如果((响应== “Y”)||(响应== “Y”)){

    2. 应该是

      if((response.equals("y"))||(response.equals("Y"))){
      

      甚至更好

      if((response.equalsIgnoreCase("y"))){
      

答案 2 :(得分:0)

由于java是基于引用的,因此响应的id不同于“y”。你应该使用

 response.equals("y")