【问题标题】:Array only printing final element JAVA? [closed]数组只打印最终元素JAVA? [关闭]
【发布时间】:2016-07-22 05:41:47
【问题描述】:
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 方法只打印我在数组中输入的最终名称为什么它不显示所有的名字?

【问题讨论】:

  • public static void newPerson() { Scanner scanner = new Scanner(System.in); System.out.print("名称:");名称 = 扫描仪.nextLine(); nameArray = new String[]{name}; } public static void personInfo() { System.out.print("当前人员:\n"); StringBuilder 数组输出 = new StringBuilder(); for ( String something : nameArray) { arrayOutput.append(something); } 字符串文本 = arrayOutput.toString(); System.out.println(文本); }
  • 这看起来不是完整的代码。您可以编辑您的问题以显示完整的代码吗?
  • 您将在每次输入后完全替换 nameArray。您必须将其添加到您的阵列中。但在这种情况下使用 'ArrayList' 会更容易。
  • 你能说明一下吗?我还没有使用 ArrayList
  • @TMichelsen,你是对的......请让你的评论成为答案并修复给定的代码以工作......我会投票给你......

标签: java arrays loops listings


【解决方案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); 
}

【讨论】:

  • 感谢您对菜鸟问题的出色工作感到抱歉
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      当你这样做时

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-10
          • 2020-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-21
          相关资源
          最近更新 更多