我正在创建一个示例登录应用。出于某种原因,当我在main方法中调用方法checkFinal时,它给了我一个错误。它说它需要调用布尔值来检查用户名和密码。我做了什么。它说他们不能通过。我不知道这是一个值传递还是传递引用问题。我有所有其他代码工作。
import java.util.Scanner;
public class program {
private static Scanner a;
private static String inputusername;
private static Scanner b;
private static String inputpassword;
private static String validusername;
private static String validpassword;
public static void main(String[] args) {
greeting();
questiona();
questionb();
username();
password();
checkOne(validusername, inputusername);
checkTwo(validpassword, inputpassword);
checkFinal(usernamecheck, passwordcheck);
}
public static void greeting() {
System.out.println("Hello!");
System.out.println("Note: All Things Are Case Sensitive!");
}
public static String questiona() {
System.out.println("What Is Your Username?");
a = new Scanner(System.in);
inputusername = a.next();
return inputusername;
}
public static String questionb() {
System.out.println("What Is Your Password");
b = new Scanner(System.in);
inputpassword = b.next();
return inputpassword;
}
public static String username() {
validusername = "username";
return validusername;
}
public static String password() {
validpassword = "password";
return validusername;
}
public static boolean checkOne(String validusername, String inputusername) {
boolean usernamecheck = false;
if (validusername == inputusername) {
usernamecheck = true;
}
return usernamecheck;
}
public static boolean checkTwo(String validpassword, String inputpassword) {
boolean passwordcheck = false;
if (validpassword == inputpassword) {
passwordcheck = true;
}
return passwordcheck;
}
public static boolean checkFinal(boolean usernamecheck, boolean passwordcheck) {
boolean checkFinal = false;
if (usernamecheck == true && passwordcheck == true) {
checkFinal = true;
} else {
checkFinal = false;
}
return checkFinal;
}
public static void compile(String[] args) {
}
public static void server(String[] args) {
}
}
答案 0 :(得分:3)
您必须将这两个方法结果分配给变量:
boolean usernamecheck = checkOne(validusername, inputusername);
boolean passwordcheck = checkTwo(validpassword, inputpassword);
checkFinal(usernamecheck, passwordcheck);
答案 1 :(得分:1)
usernamecheck是checkOne中的局部变量
passwordcheck是checkTwo中的局部变量
在您的主checkFinal(usernamecheck, passwordcheck);
中,两个参数未初始化。
看起来你想传递checkOne和checkTwo的输出作为参数
public static void main(String[] args) {
greeting();
questiona();
questionb();
username();
password();
boolean usernamecheck = checkOne(validusername, inputusername);
boolean passwordcheck = checkTwo(validpassword, inputpassword);
checkFinal(usernamecheck, passwordcheck);
}
答案 2 :(得分:1)
从其他答案中,您应该了解修复错误需要做些什么。另一种方法是缩短您的方法以使用其他两个方法作为参数调用checkFinal
方法,这样您就不需要创建另一个变量。
checkFinal(checkOne(validusername, inputusername),
checkTwo(validpassword, inputpassword));
关于您的代码的一些其他评论:
方法:
public static boolean checkOne(String validusername, String inputusername) {
boolean usernamecheck = false;
if (validusername == inputusername) {
usernamecheck = true;
}
return usernamecheck;
}
可以更改为:
public static boolean checkOne(String validusername, String inputusername) {
boolean usernamecheck = validusername.equals(inputusername);
return usernamecheck;
}
首先,您无法使用==
比较两个字符串。第二件事,你不需要比较boolean == true
。当您说if (boolean)
时,暗示它意味着if (boolean == true)
。您的其他方法也是如此。
例如:
public static boolean checkFinal(boolean usernamecheck, boolean passwordcheck) {
boolean checkFinal = false;
if (usernamecheck == true && passwordcheck == true) {
checkFinal = true;
} else {
checkFinal = false;
}
return checkFinal;
}
可以写成:
public static boolean checkFinal(boolean usernamecheck, boolean passwordcheck) {
return usernamecheck && passwordcheck;
}
答案 3 :(得分:0)
您没有保存布尔结果,以便可以将它们传递给下一步。但你可以将它们传递给checkfinal()
,如下所示:
public static void main(String[] args) {
greeting();
inputusername = questiona();
inputpassword = questionb();
/* these 2 are not used and may not be necessary
username();
password();
*/
checkfinal(checkOne(validusername, inputusername),
checkTwo(validpassword, inputpassword));
}
另外,请注意,您可能应该像我一样使用questiona()
和questionb()
方法的结果设置全局变量。它会像你一样工作,但这是一个坏习惯。