2016-07-22 11 views
0
private static String[] nameArray; 

public static void newPerson() { 
Scanner scanner = new Scanner(System.in); 

System.out.print("Name: "); 
name = scanner.nextLine(); 
nameArray = new String[] { 
    name 
}; 

} 

public static void personInfo() { 
System.out.print("Current Persons : \n"); 
StringBuilder arrayOutput = new StringBuilder(); 

for (String something: nameArray) { 
    arrayOutput.append(something); 
} 

String text = arrayOutput.toString(); 
System.out.println(text); 
} 

こんにちは、あなたの助けを事前にすべてのおかげで、私は数がその方法で入力されたら、メソッドを呼び出すループを持っている問題を持つMがこれです:配列のみ印刷最終要素JAVA?

だから私の質問私はnewPersonメソッドを呼び出したときにすべての名前を格納する代わりに名前を入力し、配列に格納して後で出力すると、personInfoメソッドは配列に入力する最終的な名前のみを出力します。なぜ、すべての名前が表示されないのですか?

+0

public static void newPerson() { スキャナスキャナ=新しいスキャナ(System.in); System.out.print( "Name:"); 名前= scanner.nextLine(); nameArray = new String [] {name}; } public static void personInfo() { System.out.print( "現在のPerson:\ n"); StringBuilder arrayOutput = new StringBuilder(); for(String something:nameArray){ arrayOutput.append(something); } 文字列text = arrayOutput.toString(); System.out.println(text); } – Bob

+0

これは完全なコードではありません。完全なコードを表示するために質問を編集できますか? –

+2

各入力の後に 'nameArray'を完全に置き換えます。 **あなたの配列に**追加する必要があります。しかし、この場合は 'ArrayList'を使う方が簡単です。 – TMichelsen

答えて

1

各入力後にnameArrayを完全に置き換えます。それを配列に追加する必要があります。しかし、この場合は 'ArrayList'を使う方が簡単です。ご提供されたコードの

ビル:あなたは

nameArray = new String[]{name}; 

を行うと

private static ArrayList<String> nameArray = new ArrayList<>(); 

public static void newPerson() { 
     Scanner scanner = new Scanner(System.in); 

     System.out.print("Name: "); 
     name = scanner.nextLine(); 
     nameArray.add(name); 
} 

public static void personInfo() { 
    System.out.print("Current Persons : \n"); 
    StringBuilder arrayOutput = new StringBuilder(); 
    for (String something : nameArray) { 
     arrayOutput.append(something); 
    } 
    String text = arrayOutput.toString(); 
    System.out.println(text); 
} 
+0

ノブの質問 – Bob

1

1つの要素で新しい文字列配列を作成するたびに nameArray = new String [] {name}; 最後の要素である最新のものが保存されます。したがって、名前をnameArrayに追加していることを確認してください。

1

最終的な配列のサイズが不明な場合は、ArrayListを使用する方がよいでしょう。おそらくあなたは、次の挿入のためのインデックスを維持する必要がある配列の初期サイズを提供した場合に、それがオーバーフローします、あなたはまだそれが配列を使用してくださいことはできますが、配列に新しい要素を追加する時に多くの作業をしなければならない

private static List<String> nameList = new ArrayList<String>(); 

public static void newPerson() { 
Scanner scanner = new Scanner(System.in); 

System.out.print("Name: "); 
nameList.add(scanner.nextLine()); 
} 

public static void personInfo() { 
System.out.print("Current Persons : \n"); 
StringBuilder arrayOutput = new StringBuilder(); 

for (String something: nameList) { 
    arrayOutput.append(something); 
} 

String text = arrayOutput.toString(); 
System.out.println(text); 
} 

配列のサイズを変更します。

0

あなたは、このようにすべての以前に保存された名前を失う、nameArrayの内容を上書きしています。 new String[]{name}は、新しい文字列配列を作成します。

配列の代わりにStringのリストを使用し、新しい名前を追加するだけです。

// use List<String> instead of String[] 
private static List<String> names = new ArrayList<String>(); 

public static void newPerson() { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Name: "); 
    name = scanner.nextLine(); 
    // add new names to list, old names will not be deleted 
    names.add(name); 
} 

public static void personInfo() { 
    System.out.print("Current Persons : \n"); 
    StringBuilder arrayOutput = new StringBuilder(); 
    for(String something : names) { 
     arrayOutput.append(something); 
    } 
    String text = arrayOutput.toString(); 
    System.out.println(text); 
} 
0

ユーザーからの入力を行うたびに、既存のものを作成して置き換えます。その追加入力をリストに置き換えます。