将方法调用到不使用Java的主类中

时间:2017-04-20 23:00:15

标签: java enums switch-statement method-call

我正在编写一个java代码,我必须通过使用2个给定的输入值来计算求和。我在类Sum中创建了一个方法。方法的名称是totalVal。现在在主类中,我想在switch case语句中调用它。我用以下方式描述我的代码 -

首先,我创建了一个包含两个常量值的枚举类

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;
   }
 }

现在在main方法中我想设置num的值并实现switch case语句,这样当用户选择First时,它会给出一个乘以num值的结果。另一方面,如果用户选择SECOND,它将给出一个乘以num值的结果。但是我在switch case方法中遇到问题,它显示了null 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;
        }
   }
}

1 个答案:

答案 0 :(得分:1)

查看方法totalVal(..)

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

事实上,我相信你在那里得到了NPE。 mod应该不是Null,mod.getProd应该返回Product但不返回n​​ull。

我没有看到你将产品放在你的md对象的哪个位置。

UPD。

您不需要两台扫描仪,只需一台扫描仪即可。

UPD.2

我想而不是

int res=Product.FIRST.getValue()*tot.Sum(md); 
你想写吗

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

和另一个案例类似。