我写了一个简单的小程序来询问用户ID,用户名和密码。到目前为止,我有用户ID工作,但用户名不起作用。我认为它与比较字符串有关,但唉,我不知道。
大多数重要代码都位于login.class中。我正在使用存储在数组中的Account对象,其中用户输入ID并且存储在等于id的位置的帐户(对于instace 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) {
}
答案 0 :(得分:1)
在这里,您要比较参考的内存地址是否相同
if (accounts[tmpID].username == tmpUsername)
应该是
if (accounts[tmpID].username.equals(tmpUsername))
正如笔记所述,除了原始数据类型之外,Java中的所有内容都是引用。因此,如果您要比较对象值,则必须实现equals方法......
答案 1 :(得分:0)
另一个经典的==和.equals()错过解释示例
==比较看看2个引用变量是否指向同一个对象,如果2个字符串对象具有相同的状态,我们想要比较,因此使用.equals()返回布尔值true如果两个String对象具有相同的状态,否则返回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