如何使用布尔值传递Java来调用方法

时间:2018-05-03 19:11:08

标签: java return boolean

我正在创建一个示例登录应用。出于某种原因,当我在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) {
    }
}

4 个答案:

答案 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()方法的结果设置全局变量。它会像你一样工作,但这是一个坏习惯。