[英]How To Call A Method With Booleans Passing Through Java
我正在創建一個示例登錄應用程序。 由於某種原因,當我在主方法中調用方法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) {
}
}
您必須將這兩個方法結果分配給變量:
boolean usernamecheck = checkOne(validusername, inputusername);
boolean passwordcheck = checkTwo(validpassword, inputpassword);
checkFinal(usernamecheck, passwordcheck);
usernamecheck是checkOne中的局部變量
passwordcheck是check中的局部變量2
在您的主要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);
}
從其他答案中,您應該了解如何糾正錯誤。 另一種方法是縮短您的方法,以另兩個方法作為參數來調用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;
}
您沒有保存布爾結果,因此可以將其傳遞到下一步。 但是您可以像這樣將它們傳遞到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()
方法的結果設置全局變量。 它會隨您的需要而工作,但這是一個壞習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.