我正在尝试创建一个程序(只是为了好玩),它接受用户输入和密码,并将它们添加到数组中。但由于我没有确定数量的用户和密码,我想通过这样的方式让它自动增长:
static String[] passes = new String[i];
然后在某个地方我++;
类似的东西:( inputUser是一个由扫描仪给出的值的字符串)
private static void Update() {
i++;
user[i] = inputUser;
}
结果:
线程中的异常" 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);
}
}
更新:我已将数组更改为列表,但仍然出现一些错误。
答案 0 :(得分:3)
使用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);
}
}
答案 1 :(得分:1)
您可以使用ArrayList代替Array。 ArrayList是一种动态数组。一旦达到大小,它就会自动增长。
使用ArrayList执行此操作。
static List<String> users = new ArrayList<String>();
private static void Update() {
users.add(inputUser)
}
答案 2 :(得分:0)
请改用 Collections 。您可以将ArrayList用于自动增长的数组。
答案 3 :(得分:0)
正如其他人所说,你可以使用收藏品。在您的情况下,您对动态列表感兴趣,因此您希望ArrayList在内部使用数组来增长。具体来说,每次填充时它的大小加倍,以便在加法方法上获得一个摊销的常数时间。
Collections需要从java.util
包导入。
您可以这样使用ArrayList:
List<String> list = new ArrayList<String>(); // You've to add parentheses, because this is an initialization from the empty constructor of ArrayList class.
list.add("Some object of the generic type");
从Java 7开始,您可以使用菱形运算符实例化泛型类,这可以推断出类型:
List<String> list = new ArrayList<>();
检查Java API以获取更多可以使用的方法。
答案 4 :(得分:0)
您没有使用正确的方法来创建ArrayList对象。您还需要导入java.util.ArrayList类。查看以下代码:
package users.main;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static int i = 0;
static List<String> users = new ArrayList<String>(); //ArrayList<String>; was wrong here
static String[] passes = new String[i];
static String inputUser = null;
static String inputPass = null;
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
String userInput = sc.nextLine();
switch (userInput) {
case "adduser":
AddUser();
break;
default:
System.out.println("Unknown command");
main(args);
}
}
}