2017-04-20 64 views
-3

我正在寫一個Java代碼,我必須通過使用2給定的輸入值來計算總和。我在類Sum中創建一個方法。該方法的名稱是totalVal。現在,在主類我希望把它在一個開關的情況下statement.I我描述我的代碼在以下way-調用主類不工作使用Java

起初,我創建了一個枚舉類有兩個恆定值,

public enum Product { 
FIRST(400), SECOND(500); 

private int value; 

private Product(int value){ 
    this.value=value; 
} 
public int getValue() { 
    return value; 
} 
} 

現在在模型類中,我調用這個enam類並創建另一個名爲num的值併爲此設置getter和setter。

public class Model { 
    private Product prod; 
    private int num; 

    public Product getProd() { 
    return prod; 
    } 
    public void setProd(Product prod) { 
     this.produkte = produkte; 
    } 
    public int getNum() { 
    return num; 
    } 
    public void setNume(int num) { 
     this.prod = prod; 
    } 
} 

現在我創建另一個類的計算方法

public class Sum{ 
    public int totalVal(Model mod){ 
    int sum = mod.getNum()*mod.getProd().getValue(); 
    return sum; 
    } 
} 

現在我想設置NUM的價值,實現開關case語句,這樣,當用戶選擇首先會的主要方法用num值乘以一個結果。另一方面,如果用戶選擇SECOND,它會給出乘以num值的結果。但我在switch case方法有問題,它顯示空poi異常錯誤。我的代碼 - 更清楚地描述它

public static void main(String[] args) { 

    Scanner sc1 =new Scanner(System.in); 
    Scanner sc2 =new Scanner(System.in); 
    System.out.println("1\tFirst: 400\n2\tSecond: 700 "); 
    System.out.println("Please choose your 1 for Compact and 2 for product"); 
    int swichValue=sc1.nextInt(); 
    Model md=new Model(); 
    System.out.println("enter number"); 
    md.setNum(sc2.nextInt()); 
    switch(swichValue){ 
    case 1:{ 
     Sum tot=new Sum(); 
     int res=Product.FIRST.getValue()*tot.Sum(md); //having problem here I am not sure how to call the method here. 
     System.out.println("total value is : "+res); 
     break; 
     } 
     case 2:{ 
     int res=Product.SECOND.getValue()*tot.Sum(md);// problem 
     System.out.println("total value is : "+res); 
     break; 
     } 
    } 
} 
+0

tot.Sum - > tot.totalVal(mod)和什麼是「mod」?不應該在那裏「md」? – iMysak

+0

@iMysak我已修改。但仍然收到錯誤java.lang.NullPointerException – hina

+0

向我們展示NPE的堆棧跟蹤。它會告訴你它發生了什麼,當試圖找出它時幫助很大...... – AHungerArtist

回答

1

外觀上方法totalVal(..)

int sum = mod.getNum()*mod.getProd().getValue(); 

事實上,我相信你有NPE那裏。 mod不應該爲null,mod.getProd應該返回Product,但不爲null。

我沒有看到您將產品交給您的md對象的位置。

UPD。

你不需要兩個掃描儀,你可以只用一個。

UPD.2

我想,而不是

int res=Product.FIRST.getValue()*tot.Sum(md); 

你想要寫

md.setProd(Product.FIRST); 
int res = tot.Sum(md); 

和類似的其他交換機情況。

+0

thnk你的答案。但我是新的Java。你能告訴我在這種情況下我能做些什麼。我應該爲mod.getProd設置一個值 – hina

+0

我不確定。在這一行中是否有任何寫入問題int res = .tot.Sum(md); – hina

+0

是的,刪除「tot」之前的點。 – iMysak