2016-03-26 142 views
1

我正在尝试制作一个程序(只是为了好玩),它接受用户输入和密码,并将它们添加到数组中。但因为我没有定义的用户和密码的次数,我希望把它自动做这样的成长:Java自动增长阵列

static String[] passes = new String[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.

+3

查看ArrayList或LinkedList。他们(和其他数据结构)随着更多元素的添加而增长。 –

+1

数组的大小是固定的,数组大小不能改变。为此,您需要创建一个具有新大小的新数组,并将之前的数组元素复制到新数组中。或者你可以使用java提供的集合类(如ArrayList或LinkedList)。 – kamal

+0

您使用了错误的列表。你应该使用java.util.List – kamal

回答

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

感谢您的理解。 –

0

使用Collections来代替。您可以使用ArrayList作为自动增长阵列。

+0

欢迎和快乐的编码:) – KDeogharkar

+0

添加一个集合是对的,所以我会+1来消除这个用户的-1。 – omt66

+0

是的,这就是我说的:) – KDeogharkar

1

可以使用ArrayList来代替Array。 ArrayList是一种动态数组。一旦达到规模,它会自动增长。

使用ArrayList做到这一点。

static List<String> users = new ArrayList<String>(); 

private static void Update() { 
    users.add(inputUser) 
} 
+0

Eclipse不喜欢那样。错误:类型列表不是通用的;它不能用参数参数化

+0

你能粘贴你的代码吗?你能否检查你是否从集合中导入了正确的List类?它应该是导入java.util.List; –

+0

我会发布大部分代码,包括main以防万一。 –

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来你可以使用更多的方法。

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

谢谢你的回答,对不起,我不能接受你的,其他人在你面前有同样的答案。 –

+0

这很好,其他答案更完整。 – kamal