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