Java自动增长数组

时间:2016-03-26 05:00:02

标签: java arrays eclipse

我正在尝试创建一个程序(只是为了好玩),它接受用户输入和密码,并将它们添加到数组中。但由于我没有确定数量的用户和密码,我想通过这样的方式让它自动增长:

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);
    }
}
  

更新:我已将数组更改为列表,但仍然出现一些错误。

5 个答案:

答案 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);
        }
    }
}