簡體   English   中英

如何通過Java傳遞帶有布爾值的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM