2016-11-06 25 views
0

我有兩個類RoomDimension & RoomCarpet。然後我有一個程序調用這兩個類,但是當我嘗試爲地毯獲得TotalCost時,我遇到了RoomCarpet類的問題。它給了我這個錯誤,當我運行CarpetCalculator無法從一個類中獲取數據到另一個使用*不用彷徨*()

(Exception in thread "main" java.lang.NullPointerException 
    at RoomCarpet.getTotalCost(RoomCarpet.java:49) 
    at CarpetCalculator.main(CarpetCalculator.java:44) 

的java:44,這個位置是在調用getTotalCost末的是System.out.print,

當我嘗試和呼叫RoomCarpet類下的getTotalCost。我認爲它與size.getArea()(當我打電話時)有關。以下是所有課程的代碼。感謝大家的幫助。

RoomDimension:

public class RoomDimension { 
     private double length; 
     private double width; 

     public RoomDimension(double len, double w){ 
      length = len; 
      width = w; 
     } 

     public void setLength(double len){ 
      length = len; 
     } 

     public void setWidth(double w){ 
      width = w; 
     } 

     public double getLength(){ 
      return length; 
     } 

     public double getWidth(){ 
      return width; 
     } 

     public double getArea(){ 
      return length * width; 
     } 

     public String toString(){ 
      String str = "The length you entered was " + length 
         + " and the width you entered was " + width; 
      return str; 
     } 
    } 

RoomCarpet:

public class RoomCarpet{ 
    private RoomDimension size; 
    private double carpetCost; 

    public RoomCarpet (double cost){ 
     carpetCost = cost; 
    } 

     public void setCarpetCost(double cost){ 
      carpetCost = cost; 
     } 

     public double getCarpetCost(){ 
      return carpetCost; 
     } 

     public double getTotalCost(){ 
      return size.getArea() * carpetCost; 
     } 

     public String toString(){ 
      String str = "\nYour total area for your room is " + size.getArea() 
         + "\nThe cost of your carpet per square foot is " + carpetCost; 

      return str; 
     } 

    } 

CarpetCalculator:

import java.util.Scanner; // Needed for the Scanner class 

/** 
* This program demonstrates the RoomDimension & RoomCarpet classes. 
*/ 

public class CarpetCalculator { 

    public static void main(String[] args){ 

     double length; // hold room length 
     double width; // hold room width 
     double cost; // hold carpet cost 

      Scanner keyboard = new Scanner(System.in); 

      System.out.print("What is your rooms length? "); 
      length = keyboard.nextDouble(); 

      System.out.print("What is your rooms width? "); 
      width = keyboard.nextDouble(); 

      System.out.print("What is the cost of your carpet per square foot? "); 
      cost = keyboard.nextDouble(); 

      RoomDimension testDimension = new RoomDimension(length, width); 

      RoomCarpet testCarpet = new RoomCarpet(cost); 

      System.out.println(testDimension); 
      System.out.println(testCarpet); 
      System.out.println("Which means your total cost to carpet the room is " + testCarpet.getTotalCost()); 
    } 
    } 

回答

0

需要初始化在RoomCarpet類大小變量。你可以使用setter方法或通過構造函數。

試試這個:

公共類RoomCarpet {

private RoomDimension size; 
private double carpetCost; 

public RoomCarpet (double cost){ 
    carpetCost = cost; 
} 

public RoomCarpet (double cost,RoomDimension size){ 
    carpetCost = cost; 
    this.size = size; 
} 

public void setCarpetCost(double cost){ 
    carpetCost = cost; 
} 

public double getCarpetCost(){ 
    return carpetCost; 
} 

public RoomDimension getSize() { 
    return size; 
} 

public void setSize(RoomDimension size) { 
    this.size = size; 
} 

public double getTotalCost(){ 
    if(size != null) { 
     return size.getArea() * carpetCost; 
    } 
    else { 
     System.out.println("error size is not define"); 
     return 0; 
    } 
} 

public String toString(){ 
    String str = "\nYour total area for your room is " + size.getArea() 
      + "\nThe cost of your carpet per square foot is " + carpetCost; 

    return str; 
} 

}

+0

謝謝你這麼多,固定它。 – Naro

0

那是因爲你從來沒有在您的RoomCarpet大小屬性初始化。你應該在RoomCarpet構造函數傳遞RoomDimension對象:

public RoomCarpet (RoomDimension size, double carpetCost){ 
    this.size = size; 
    this.carpetCost = carpetCost; 
}