如何在Java中创建和显示列表?

时间:2010-05-04 15:03:41

标签: java list arraylist structure

我必须创建一个列表,比如说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(??);{
        }

} }}

6 个答案:

答案 0 :(得分:7)

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

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

另外:

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

答案 1 :(得分:1)

for (Person p : thing) {
   System.out.println(p);
}

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

另见

答案 2 :(得分:0)

看起来很好。

我只想提出几点建议:

1.-从System:

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

答案 3 :(得分:0)

// 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

答案 4 :(得分:0)

我建议替换

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

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

通过指定列表的长度来避免可能的重新分配,效率更高。 它使用接口而不是类(更容易切换实现,例如。)。

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

答案 5 :(得分:0)

我有更好的升级到你的班级,以便更好。您可以在JavaBean类中转换类Person,添加方法setName(String name)setStuff(String stuff),并添加方法getName()getStuff()以检索值。

您可以将这些方法定义为public,将字段名称和内容定义为private,以保护数据。您可以设置值,如

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

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

感谢。