我正在尝试制作一个程序(只是为了好玩),它接受用户输入和密码,并将它们添加到数组中。但是由于我没有定义数量的用户和密码,我想通过执行以下操作使其自动增长:
static String[] passes = new String[i];
然后在某处 i++;
像这样:(inputUser 是一个由扫描仪赋予值的字符串)
private static void Update() {
i++;
user[i] = inputUser;
}
结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
我试过了,但没有用,也许我做错了什么?
请求代码:
package users.main;
import java.util.List;
import java.util.Scanner;
public class Main {
static int i = 0;
static List<String> users = new ArrayList<String>; // << Also highlighted red. Do i need ()?
// ^^^ Error
static String[] passes = new String[i];
static String inputUser = null;
static String inputPass = null;
public static void main (String[] args) {
@SuppressWarnings("resource") // <--- Eclipse wanted me to add this?....
Scanner sc = new Scanner(System.in);
String userInput = sc.nextLine();
switch (userInput) {
case "adduser":
AddUser();
break;
default:
System.out.println("Unknown command");
main(args);
}
}
UPDATE: I have changed the array to a list, but am still getting some errors.
使用像 ArrayList 这样的集合,这样它就可以动态增长。另一个建议,引入一种新的数据类型来保存您的用户名和密码信息。
这是一个可能对您有所帮助的简单程序。
package stackoverflow1;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class User {
private String mUserName;
private String mPassword;
public User(String userName, String password) {
mUserName = userName;
mPassword = password;
}
public String getUserName() { return mUserName; }
public String getPasword() { return mPassword; }
@Override
public String toString() {
String info = String.format("Name: %s Pwd: %s", mUserName, mPassword);
return info;
}
}
public class Main {
static List<User> users = new ArrayList<>();
static void addUser(Scanner scanner) {
String userName, password;
println("UserName: ");
userName = scanner.nextLine();
println("Password: ");
password = scanner.nextLine();
println("Adding a new user now.");
users.add(new User(userName, password));
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean done = false;
while (!done) {
println("Add user name and password. Type quit when you are done.");
String userInput = scanner.nextLine();
switch (userInput) {
case "adduser":
addUser(scanner);
break;
case "quit":
done = true;
break;
default:
println("Unknown input!");
}
}
println("--- Users Information ---");
users.forEach(user -> println(user.toString()));
}
static void println(String msg) {
System.out.println(msg);
}
}