向数组添加元素并再次使用该数组

时间:2018-12-01 22:02:48

标签: java arrays loops passwords

对于一个班级,我必须创建一个程序,要求用户输入密码,如果他们输入的密码尚未列出,请将其添加到列表中,并允许他们再次输入正确的密码。我尝试编写一种方法来复制数组并添加新密码,但是它不起作用。有人可以告诉我我在哪里错了吗?哦,我必须使用数组而不是arraylist:(

public static void main(String[] args) {
    Scanner console = new Scanner(System.in);
    String pin;

    do {
        System.out.print("Please enter the password: ");
        pin = console.nextLine();
        checkPassword(pin);
    } while (!checkPassword(pin));



}

public static boolean checkPassword (String pin) {
    String[] passwords = {"9999", "coastal", "1"};

    if (Arrays.stream(passwords).anyMatch(pin::equals)) {
        return true;
    } else {
        int count = 0;
        String[] newWord = new String[passwords.length + 1];
        for(int i=0; i < passwords.length; i++){
             newWord[i]= passwords[i];
             count++;
        }
        newWord[count] = pin;

        passwords = newWord;
        System.out.print("Password was not in array. It has now been added. Try logging in again.");
        return false;
    }
}

3 个答案:

答案 0 :(得分:0)

根据我对您的问题的了解,您有一个密码列表,您要尝试执行的操作是要求用户插入密码,然后重新插入该密码,以验证重新插入的密码是否匹配第一个。

为此,您必须提示用户输入密码,并将接收到的密码添加到密码列表中。之后,再次提示用户输入相同的密码,并检查密码列表中是否存在该密码。如果插入正确,则自用户首次添加密码以来,该密码就应该存在。

您正在执行的此实现并不是最好的。尝试使用词典以便将密码与用户名关联。您还可以请求2个输入并进行比较,以验证它们是否相同,然后将密码添加到字典中。

希望有帮助。

答案 1 :(得分:0)

您的第一个错误是您使用本地变量作为密码,因此它总是在调用方法时初始化。

其次,您两次检查密码:首先检查密码,然后再检查循环条件。

因此,建议您使用一个字段代替本地变量作为密码,并且仅执行一次检查,程序将正常运行。

更新的代码:

public class Test {
    private static String[] passwords = {"9999", "coastal", "1"};

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        String pin;

        boolean valid = false;
        do {
            System.out.print("Please enter the password: ");
            pin = console.nextLine();
            valid = checkPassword(pin);
        } while (!valid);


    }

    public static boolean checkPassword(String pin) {
        if (Arrays.stream(passwords).anyMatch(pin::equals)) {
            return true;
        } else {
            int count = 0;
            String[] newWord = new String[passwords.length + 1];
            for (int i = 0; i < passwords.length; i++) {
                newWord[i] = passwords[i];
                count++;
            }
            newWord[count] = pin;

            passwords = newWord;
            System.out.print("Password was not in array. It has now been added. Try logging in again.");
            return false;
        }
    }
}

答案 2 :(得分:0)

您面临的问题与变量范围有关。每当当前方法到达执行结束时,其变量都将超出范围并符合垃圾回收的条件。您可以说passwords是局部变量。

现在,很难在方法中保存数组的更新版本,该数组将被丢弃并且在后续调用中不可见。

public static boolean checkPassword (String pin) {
    String[] passwords = {"9999", "coastal", "1"};
    ...
} // here, passwords goes out of scope

要解决错误,您必须将其全局存储或将其添加为方法参数。

// global
private static String[] passwords = {"9999", "coastal", "1"};

// method parameter
public static boolean checkPassword (String pin, String[] passwords) {
    ...
}