数组只打印最终元素JAVA?

时间:2016-07-22 05:41:47

标签: java arrays loops listings

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

大家好,我们提前感谢您的帮助我遇到了问题我有一个循环,一旦在该方法中输入一个数字就调用一个方法是这样的:

所以我的问题是每当我调用newPerson方法并输入一个名称而不是将所有名称存储在数组中并稍后打印时,personInfo方法只打印我在数组中输入的最终名称为什么它不显示所有的名字?

5 个答案:

答案 0 :(得分:1)

每次使用一个元素创建新的字符串数组时 nameArray = new String [] {name}; 所以最新的一个将被保留,这是你的最后一个元素。因此,请确保将名称附加到nameArray。

答案 1 :(得分: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);
}

您仍然可以使用数组执行此操作但是在将新元素添加到数组中时您必须做很多工作,可能您需要维护下一次插入的索引,提供数组的初始大小以及万一溢出然后调整数组大小

答案 2 :(得分:1)

每次输入后你都会完全替换nameArray。您必须将它添加到您的阵列。但在这种情况下使用'ArrayList'更容易。

以您提供的代码为基础:

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

答案 3 :(得分:0)

当你这样做时

nameArray = new String[]{name};

您正在覆盖nameArray的内容,从而丢失所有以前保存的名称。 new String[]{name}创建一个新的String数组。

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

答案 4 :(得分:0)

每次从用户那里获取输入时,您都在创建和替换现有的。替换在列表中添加输入。