4

2 番目の for ループの直後に「ID を入力してください」というプロンプトが表示されず、「パスワードを入力してください」に直行します。また、ログイン プロンプトからパスワード プロンプトまで多くのコードをスキップします。なぜこのように動作するのかについて何か考えがある場合は、私と共有してください。

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

3 に答える 3

4

それ以外の

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

使用する

(response.equals("y"))||(response.equals("Y"))
于 2012-11-29T22:37:02.770 に答える
3

演算子を使用し==て文字列の等価性をチェックしています。使用してequals() methodください。

==オペレーター:

  1. プリミティブ変数の場合、2 つのプリミティブが同じ値を持つかどうかを確認します。
  2. オブジェクトの場合: 2 つの参照変数が同じオブジェクトを指している (参照している) かどうかを確認します。

equals() method

  1. 2 つのオブジェクトが有意に等しいかどうかを確認します。

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

する必要があります

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

またはさらに良い

if((response.equalsIgnoreCase("y"))){
于 2012-11-29T22:37:41.913 に答える
0

Java は参照ベースであるため、応答は「y」とは異なる ID を持ちます。使用する必要があります

 response.equals("y")
于 2012-11-29T22:37:41.897 に答える