【问题标题】:How to create and display a list in Java?如何在 Java 中创建和显示列表?
【发布时间】:2010-05-04 15:03:40
【问题描述】:

我必须创建一个列表,比如说 50 个人,(在 Java 中)并显示该列表,我真的不知道该怎么做。所以这是我迄今为止尝试做的。请更正并完成我的一些代码。

public class Person {

    String name;
    String stuff;
}


public class CreatePerson {



public static void  ang()  {    

    ArrayList<Person> thing=new ArrayList<Person>(); 
    Scanner diskScanner = new Scanner(in);


    for(int i=0; i<50; i++){

        Person pers = new Person();

          out.print("name: ");
      pers.name=diskScanner.nextLine();

      out.print("stuff: ");
      pers.stuff=diskScanner.nextLine();

      thing.add(pers);

          break;

    }
    // Display people  
    for (int i=0; i<50; i++) {
        out.println(??);{
        }

} }}

【问题讨论】:

  • 您的代码遇到了什么问题?还是您只是在询问实现这一目标的最佳方法?
  • 第一个for循环因为break语句只运行一次。
  • 你的家庭作业中有什么问题#? (只是说...)

标签: java list arraylist structure


【解决方案1】:

您可以使用以下结构浏览列表:

for (Person person: thing) {
    System.out.println(person.name + " " + person.stuff);
}

还有:

  • 您可能希望将列表重命名为“persons”而不是“thing”,因为它包含多个人。
  • 您可能希望向 Person 类添加一个 toString() 方法,以便可以使用 System.out.println(person) 显示一个人。
  • 您可能希望中断第一个 for 循环,以便获取文件中的所有元素。

【讨论】:

    【解决方案2】:
    for (Person p : thing) {
       System.out.println(p);
    }
    

    这假设Person 有一个合理的@Override public String toString() 用于打印。否则,只需根据需要访问 p 的成员即可。

    另见

    【讨论】:

      【解决方案3】:

      开始看起来不错。

      我只想提出几点建议:

      1.- 从系统导入out 属性:

      import static java.lang.System.out;
      

      2.- 在 for 循环中删除 break

      ...
      for(int i=0; i<50; i++){
          Person pers = new Person();
          out.print("name: ");
          pers.name=diskScanner.nextLine();
          out.print("stuff: ");
          pers.stuff=diskScanner.nextLine();
          thing.add(pers);
          break; //<-- Remove this to continue with the remaining 49 persons
      }
      

      3.- 最后你可以像这样打印值:

      // Display people  
      for (int i=0; i<50; i++) {
          //out.println(??);{
          //}
          // could be:
          out.println("name: "+ thing.get(i).name +" stuff:"+thing.get(i).stuff );
      }
      ...
      

      编辑

      替代品:

      // introduce a variable p 
      for (int i=0; i<50; i++) {
          Person p = thing.get(i);
          out.println("name: "+ p.name +" stuff:"+p.stuff );
      }
      

      或者

      // using the size of the array and printf.. 
      for (int i=0; i<thig.size(); i++) {
          Person p = thing.get(i);
          out.printf("name: %s stuff: %s %n", p.name ,p.stuff );
      }
      

      甚至更好(我的首选)

      // using the for-each syntax
      for( Person p : thing ) {
            out.printf("name: %s stuff: %s %n", p.name ,p.stuff );
      }
      

      【讨论】:

        【解决方案4】:
        // put the following in a file named CreatePerson.java
        import java.util.ArrayList;
        import java.util.List;
        import java.util.Scanner;
        
        class Person {
            String name;
            String stuff;
            @Override public String toString() {
                return "Name: " + name + ", Stuff: " + stuff;
            }
        }
        
        public class CreatePerson {
            public static void main(String[] args) {
                List<Person> people = new ArrayList<Person>(50);
        
                Scanner scanner = new Scanner(System.in);
                for(int i = 1; i <= 50; i++) {
                    Person p = new Person();
                    System.out.println("Enter person #" + i);
                    System.out.print("Name: ");
                    p.name = scanner.nextLine();
                    System.out.print("Stuff: ");
                    p.stuff = scanner.nextLine();
        
                    people.add(p);
                }
        
                System.out.println("The following people were added:");
                for(Person p : people) {
                    System.out.println(p);
                }
            }
        }
        

        使用 javac CreatePerson.java 编译程序

        使用 java CreatePerson 运行程序

        【讨论】:

          【解决方案5】:

          我建议更换

          ArrayList<Person> thing=new ArrayList<Person>(); 
          

          List<Person> thing=new ArrayList<Person>(50);
          

          通过指定列表的长度来避免可能的重新分配,效率更高。 当您使用接口而不是类时,它更加健壮(例如,可以轻松切换实现)。

          还可以考虑将 Person 属性设为私有并使用 getter/setter 来处理它们。

          【讨论】:

            【解决方案6】:

            为了变得更好,我对你的班级进行了更好的升级。您可以在 JavaBean 类中转换类 Person,添加方法 setName(String name)setStuff(String stuff) 并添加方法 getName()getStuff() 以检索值。

            您可以将这些方法定义为公共的,将字段名称和内容定义为私有,以保护数据。您可以将值设置为

            p.setName(scanner.nextLine());
            p.setStuff(scanner.nextLine());
            

            并打印在 for 循环中使用 p.getName()p.getStuff() 提取 Person 引用的值

            谢谢。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-09-16
              • 1970-01-01
              • 2011-08-03
              • 2012-06-13
              • 1970-01-01
              • 1970-01-01
              • 2022-12-02
              相关资源
              最近更新 更多