Как вызвать метод с булевыми значениями, проходящими через Java - PullRequest
0 голосов
/ 03 мая 2018

Я создаю пример приложения для входа. По какой-то причине, когда я вызываю метод 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 голосов
/ 03 мая 2018

Вы не сохраняете логические результаты, чтобы их можно было перейти к следующему шагу. Но вы можете передать их в 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(), как я это сделал. Это будет работать, как у вас, но это плохая привычка.

0 голосов
/ 03 мая 2018

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);
}
0 голосов
/ 03 мая 2018

Из других ответов вы должны получить представление о том, что вам нужно сделать, чтобы исправить свою ошибку. Другим способом является сокращение вашего метода для вызова метода 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;
}
0 голосов
/ 03 мая 2018

Вы должны присвоить эти два результата метода переменным:

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