为每个循环获取对象的属性到java

时间:2016-03-23 16:52:52

标签: java

public class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age= age; 
    }
    Person Rome[] = new Person[10];

    public void initializes {
        Rome[0]= new Person ("Antonio",20);
        Rome[1]= new Person ("Marco",11);
        //...
        Rome[9]= new Person("Giuseppe",27);
    }
    public void printName(){
        for(Person x : Rome){
            System.out.println(x.name);
        }
    }
    //TEST CLASS
    public static void main (String args[]){
        Person obj = new Person();
        obj.initializes();
        obj.printName(); // Exception in thread "main" java.lang.NullPointerException
    }
}

为什么每个作品的打印只是用原始对象,如果我想打印一个复杂对象的属性不起作用?

3 个答案:

答案 0 :(得分:0)

数组索引从0开始,而不是从1开始。初始化包含10个Persons插槽的数组,但第一个(位置0)为null。所以你得到一个NullPointerException。

从0开始初始化以解决初始问题。但是,数组仍然包含10个项目(其中7个为null),因此循环将在打印三个名称后继续,然后仍然会抛出NullPointerException。

工作代码,但在打印三个名称后抛出NullPointerException:

public class Person {
    String name;
    int age;

    public Person(){
        // No-arg constructor required
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
}

Person Rome[] = new Person[10];

public void initializes(){
    Rome[0] = new Person("Antonio", 20);
    Rome[1] = new Person("Marco", 11);
    Rome[2] = new Person("Giuseppe", 27);
}

    public void printName() {
        for (Person x : Rome) {
        System.out.println(x.name);
        }
    }    
}

考试类:     公共课测试{

    public static void main (String args[]){
        Person obj = new Person();
        obj.initializes();
        obj.printName();
    }

}

如果您希望能够动态更改人数,请使用ArrayList。

然后代码变为:

import java.util.ArrayList;

public class Person {
    String name;
    int age;

    public Person(){
        // No-arg constructor required
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    public void initializes(){
        Rome.add(new Person("Antonio", 20));
        Rome.add(new Person("Marco", 11));
        Rome.add(new Person("Giuseppe", 27));
    }

    public void printName() {
        for (Person x : Rome) {
            System.out.println(x.name);
        }
    }
}

答案 1 :(得分:0)

您需要初始化Rome[0]对象。 它看起来像是:

public void initializes {
    Rome[0]= new Person ("name",00);
    Rome[1]= new Person ("Antonio",20);
    //...
}

如果您在没有对象类的情况下初始化对象,代码会更好。例如,在测试类中:

Person[] Romeo = new Person[] {
 new Person(name, 00),
 //...
} 

答案 2 :(得分:0)

结果:

文件名Test.java //并且有代码。它是原型,我做了编译,但它是你的一个例子

public class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age= age; 
    }

    public void printName(){
        System.out.println(name);
    }
}
//Test class
public class Test {
    public static void main (String args[]){
        Person[] Romeo = new Person[] {
           new Person("name", 00),
           //...
        }
        for(int i = 0; i < 10; i++)//or another loop style
           Romeo[i].printName();  
    }
}