2016-03-26 25 views
1

ユーザー入力とパスワードを取り込んで配列に追加するプログラムを作成しようとしています。私は、ユーザーとパスワードの定義された数を持っていないので、しかし、私はそれが自動このような何かやって成長したい:Java自動拡張アレイ

static String[] passes = new String[i]; 

をして、どこかに私++;そのような

何か:私はそれを試してみましたが、それは、私は多分、うまくいきませんでした

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

private static void Update() { 
    i++; 
    user[i] = inputUser; 
} 

結果(inputUserは、スキャナによって値が与えられた文字列です)何か間違っている?

コードが要求されました:

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などのコレクションを使用してください。もう1つの推奨事項は、ユーザー名とパスワードの情報を保持する新しいデータ型を導入することです。

ここでは簡単なプログラムを紹介します。

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

Arrayの代わりにArrayListを使用できます。 ArrayListは一種の動的配列です。サイズに達すると自動的に拡大します。

ArrayListを使用するこれを行うには

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

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

Eclipseはそれを好まない。エラー:List型は一般的ではありません。引数でパラメータ化することはできません

+0

コードを貼り付けることはできますか?コレクションから正しいListクラスをインポートしたかどうか確認できますか? java.util.Listをインポートする必要があります。 –

+0

私は大文字と小文字を含め、ほとんどのコードを投稿します。 –

0

他にも述べたように、コレクションを使用できます。あなたの場合、動的リストに興味があるので、配列を内部的に使用して拡大するArrayListが好きです。具体的には、追加メソッドで償却された一定の時間を得るために、その都度サイズが倍になります。

Collectionsjava.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クラスをインポートする必要があります。以下のコードをチェックアウトしてください:

+0

答えをありがとう、申し訳ありません、私はあなたを受け入れることができなかった、他の誰かがあなたの前に同じ答えを持っていた。 –

+0

それはうまくいって、もう一つの答えはより完全です。 – kamal

関連する問題