2016-03-26 138 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