Java数组中线程“main”java.lang.NullPointerException中的异常

时间:2013-05-03 03:52:57

标签: java arrays nullpointerexception

我从我的代码中收到此错误:

  

线程“main”java.lang.NullPointerException中的异常     在MainClass.main(MainClass.java:20)

任何人都可以识别错误,我认为它与初始化我的数组有关吗?

MainClass.java

public class MainClass {


public static void main(String[] args) {

    //dummy vars to simulate user input
    double price = 2.75;

    //declare an array of wincalcs 
    WinCalc[] staging1;
    staging1 = new WinCalc[100];


    for (int x=0; x<staging1.length; x++ ) {
        staging1[x].price = price;
        staging1[x].quantity = x+1;
        staging1[x].calcTotal();    
    }



}

}

WinCalc.java

public class WinCalc {

public double price;
public double quantity;
public double total;

public WinCalc () {
    price= 0;
    quantity = 0;
    total = 0;
}

public void calcTotal() {
    this.total = price * quantity;
}

}

4 个答案:

答案 0 :(得分:3)

您忘了创建对象

for (int x=0; x<staging1.length; x++ ) {
    staging1[x] = new WinCalc();   
    // ...
}

答案 1 :(得分:1)

分配数组时,最初会使用空条目填充它。为了使其包含实际对象,您必须手动填充新分配的对象:

WinCalc[] staging1;
staging1 = new WinCalc[100];

for(int n = 0; n < 100; n ++)
{
    stanging1[n] = new WinClac();
}

这是因为java中的所有对象都是默认指向无处的引用。

答案 2 :(得分:0)

使用以下代码更新您的代码:

public class MainClass {

public static void main(String[] args) {

    //dummy vars to simulate user input
    double price = 2.75;

    //declare an array of wincalcs 
    WinCalc[] staging1;
    staging1 = new WinCalc[100];


    for (int x=0; x<staging1.length; x++ ) {
        staging1[x] = new WinCalc(); 
        staging1[x].price = price;
        staging1[x].quantity = x+1;
        staging1[x].calcTotal();    
    }
}

答案 3 :(得分:0)

Cases that we get NullPointerException are accessing/modifying the field of null object or accessing/modifying the slot of null as if it were an array or taking the length of null as if it were an array.
//Let us have a Person class 
public class Person {
          private String name;
          private int age;
    public Person(String name, int age) {
    this.name = name;
    this.age = age;
          }
    public String getName(){
      return name;
     }
   public int getAge(){
      return age;
    }
  public String toString(){
      return "[Name->"+ getName() +" ,Age->"+getAge()+"]";
     }
}
//The main class simulate collection of persons using array
import java.util.Arrays;
public class ListOfPersonIn {
public static void arrayManipulation() 
{
    Person[] persons=new Person[3]; // Array of Person to conatain 3 persons
              Person titi=new Person("Titi", 35);
    Person beti=new Person("Beti", 10);
    Person nati=new Person("nati", 18);
     // Display list of persons
     for(Person person:persons){
        System.out.println(person.toString());
      }
   //Double array size, copy the old value to the new array and add new persons 
    Person[]newPersons=copyArraySize(persons);
    System.out.println("Loop through a new Array ");
    for(Person person: newPersons){
        System.out.println(person.toString());
     }
    }
   // Private method to resize array, copy the old array to the new array and add new list of persons
private static Person [] copyArraySize(Person [] persons)
{
               Person[]newPersons=Arrays.copyOf(persons,  persons.length*2);
// newPersons[persons.length]=new Person("meti", 50); in this case we get NullPointerException   because the new array has length 6 but only 4 data is populated the reaming 2 indices are not populated i.e newArray[4] and newArray[5] are null value so it raised NullPointerException. Not to get NullPointerException  just populate all array indices with data 
     for(int i=persons.length;i< newPersons.length;i++){
          newPersons[i]=new Person("meti", 50);//duplicate data, array can’t maintain uniqueness like set 
        }
        return newPersons;
  }
  public static void main(String[] args) {
            arrayManipulation();
     }
}