【问题标题】:How To Call A Method With Booleans Passing Through Java如何使用通过 Java 传递的布尔值调用方法
【发布时间】:2018-10-14 04:44:20
【问题描述】:

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

【问题讨论】:

  • 在你的 main 里面改成这个 -checkFinal(checkOne(validusername, inputusername),checkTwo(validpassword, inputpassword));

标签: java return boolean


【解决方案1】:

您必须将这两个方法结果分配给变量:

boolean usernamecheck = checkOne(validusername, inputusername);
boolean passwordcheck = checkTwo(validpassword, inputpassword);
checkFinal(usernamecheck, passwordcheck);

【讨论】:

    【解决方案2】:

    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);
    }
    

    【讨论】:

    • 附带说明,当您检查诸如if (usernamecheck == true && passwordcheck == true) 中的布尔值时,您不需要检查布尔值是否为真,上面的if 语句与if (usernamecheck && passwordcheck) 相同。如果要检查布尔值是否为 false,可以使用 if (! foo) 而不是 if (foo = false)
    • 谢谢,它成功了。但这是价值传递问题还是参考传递问题。我只想获得更多的知识。
    • this 线程可能会回答您的问题。当一个变量在一个方法中被声明时,它只有在该方法返回之前是“活动的”。如果你编译了你会看到的代码,并沿着cannot find symbol 的行出现错误,箭头指向usernamecheck,这告诉你该变量尚未在你调用它的方法的范围内定义。
    【解决方案3】:

    从其他答案中,您应该了解需要做什么来修复错误。另一种方法是缩短您的方法以调用checkFinal 方法,并将其他两个方法作为参数,这样您就不需要创建另一个变量。

    checkFinal(checkOne(validusername, inputusername), 
               checkTwo(validpassword, inputpassword));
    

    关于您的代码的一些额外的 cmets:

    方法:

    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;
    }
    

    【讨论】:

      【解决方案4】:

      您没有保存布尔结果,以便将它们传递到下一步。但是您可以像这样将它们传递给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() 方法的结果设置全局变量。它会按你的方式工作,但这是一个坏习惯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 2017-08-19
        • 2014-07-26
        相关资源
        最近更新 更多