0

ユーザー ID、ユーザー名、およびパスワードを要求する簡単な小さなプログラムを作成しました。これまでのところ、ユーザー ID は機能していますが、ユーザー名は機能しません。文字列の比較と関係があると思いますが、残念ながらわかりません。

重要なコードのほとんどは login.class にあります。ユーザーが ID を入力する配列に格納された Account オブジェクトと、ID と同じ場所に格納されたアカウントを使用しています (たとえば、Accounts[4] はアカウント、Derp であり、ユーザーは ID を入力してそれにアクセスします)。の 4) 次に、ユーザー名を入力し、次にパスワードを入力します。プログラムを運用可能にする以上の改良はしたくありませんが、アドバイスはいつでも歓迎します。

public class Login {

static boolean IDisOK = false;
static boolean usernameisOK = false;
static boolean passwordisOK = false;

static Scanner input = new Scanner(System.in);
static Scanner input2 = new Scanner(System.in);

static Account test = new Account("guest", "blank", 0);
static Account[] accounts = new Account[1];

static int tmpID = -1;
static String tmpUsername = "has not been entered, weird";
static String tmpPassword = "has not been entered, weird";
static Account tmp;

public static void initAccounts() {
    accounts[0] = test;
}

public static void getaccID() { // Prompts and asks the user for and ID
    System.out.println("Please enter in your account ID");
    tmpID = input.nextInt();
    if (tmpID < accounts.length) {
        IDisOK = true;
    }//end of if statement

}//end of getaccID

public static void getaccUsername() { // Prompts and asks user for a username if      the ID was OK
    if (IDisOK == true) {
    System.out.println("Please enter the username linked to the ID: " + tmpID);
    tmpUsername = input2.nextLine();
    if (accounts[tmpID].username == tmpUsername) {
        usernameisOK = true;
        }//end of if statement
    } else {
        System.out.println("Please get a valid ID then come back.");
        System.exit(0);//end of if statement

    }
}//end of getaccUsername

public static void getaccPassword() { //Prompts and asks user for a password is the     username was OK
    System.out.println("Please enter the password set for this username: " +     accounts[tmpID].username);
    tmpPassword = input.nextLine();
    if (usernameisOK == true) {
        if (accounts[tmpID].password == tmpPassword) {
            passwordisOK = true;
            Main.setAuth(true);
        }
    }else{
        System.out.println("Please come back when you have a valid     username.");
        System.exit(0);

    }
}//end of getaccPassword

public static void signIn() {
    initAccounts();
    getaccID();
    getaccUsername();
    getaccPassword();



}//end of signIn method

}//end of class



public class Account {

String username = " ";
String password = " ";
int ID;



public Account(String userIn, String passwordIn, int idIn) {
    this.username = userIn;
    this.password = passwordIn;
    this.ID = idIn;
}//end of constructor



public String getUsername() {
    return this.username;
}
public String getPassword() {
    return this.password;
}
public int getID() {
    return this.ID;
}
public void setUsername(String input) {
    username = input;
}
public void setPassword(String input) {
    password = input;
}

}

public class Main {

static boolean hasbeensaved = false;
static boolean auth = false;
public static void main(String[] args) {
    Login.signIn();
    if (getAuth() == true) {





    }
4

2 に答える 2

1

ここでは、参照のメモリアドレスが同じかどうかを比較しています

 if (accounts[tmpID].username == tmpUsername)

する必要があります

if (accounts[tmpID].username.equals(tmpUsername))

注意として、プリミティブ データ型を除いて、Java のすべてが参照です。したがって、オブジェクトの値を比較する場合は、 equals メソッドを実装する必要があります...

于 2013-09-04T02:34:10.673 に答える
0

別の古典的な == と .equals() の解釈ミスの例

== は、2 つの参照変数が同じオブジェクトを指しているかどうかを比較します。ここでは、2 つの文字列オブジェクトが同じ状態であるかどうかを比較したいので、両方の文字列オブジェクトが同じ状態である場合にブール値 true を返す .equals() を使用します。それ以外の場合は false を返します。

これを試して:

public static void getaccUsername() { // Prompts and asks user for a username if          the ID was OK
    if (IDisOK == true) {
    System.out.println("Please enter the username linked to the ID: " + tmpID);
    tmpUsername = input2.nextLine();
    if (accounts[tmpID].username.equals( tmpUsername)) {// use .equals in string state comparision
        usernameisOK = true;
        }//end of if statement
    } else {
        System.out.println("Please get a valid ID then come back.");
        System.exit(0);//end of if statement

    }
}//end of getaccUsername
于 2013-09-04T02:36:25.767 に答える