2013-05-03 49 views
0

我得到從我的代碼此錯誤:異常在Java數組線程 「主」 顯示java.lang.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; 
} 

}

回答

3

你忘了創建對象

for (int x=0; x<staging1.length; x++) { 
    staging1[x] = new WinCalc(); 
    // ... 
} 
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();  
    } 
} 
1

當你分配你的陣列,它最初使用空條目。爲了它包含實際的對象,必須手動填充將新分配的對象:

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

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

這是因爲在Java中的所有對象都是其引用默認指向無處。

+0

我最喜歡這個答案,因爲它解釋了爲什麼這是必要的 – Patashu 2013-05-03 04:04:13

+0

@Patashu修復某人的代碼,它工作了一天。教一個人修理自己的代碼,它終身有用。 :) – ApproachingDarknessFish 2013-05-03 04:06:13

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(); 
    } 
} 
相關問題