数组只打印最终元素 JAVA?

Array only printing final element JAVA?

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 方法只打印我在数组中输入的最终名字,这是为什么不显示所有名称?

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

如果不确定数组的最终大小,最好使用 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);
}

你仍然可以使用数组来完成它,但是在将新元素添加到数组中时你必须做很多工作,可能你需要为下一次插入维护索引,提供数组的初始大小,以防它溢出然后调整大小数组。

您要在每次输入后完全替换 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); 
}

当你这样做时

nameArray = new String[]{name};

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

使用字符串列表而不是数组,只需向其中添加新名称即可。

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

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