【问题标题】:Calling a method into main class not working using Java将方法调用到主类中无法使用 Java
【发布时间】:2017-04-20 23:00:14
【问题描述】:

我正在编写一个 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;
        }
   }
}

【问题讨论】:

  • tot.Sum -> tot.totalVal(mod) 什么是“mod”?那里不应该是“md”吗?
  • @iMysak 我已修改。但仍然收到错误 java.lang.NullPointerException
  • 向我们展示 NPE 的堆栈跟踪。它会告诉你它发生在哪一行,这在试图弄清楚它时很有帮助......
  • Sum tot=new Sum(); 你有一个名为tot 的变量,它是Sum 类的对象。 tot.Sum(md) 试图在对象 tot 上调用名为 Sum 的方法——但 class Sum 没有方法 named @987654333 @,它只有一个名为 totalVal 的方法...例如tot.totalVal(md)

标签: java enums switch-statement method-call


【解决方案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); 

在另一个 switch-case 中类似。

【讨论】:

  • 感谢您的回答。但我是java新手。你能告诉我在这种情况下我能做什么吗?我应该为 mod.getProd 设置一个值吗
  • 我不确定。这行是否有任何书写问题 int res=.tot.Sum(md);
猜你喜欢
  • 2020-06-20
  • 2016-01-08
  • 2015-04-23
  • 2019-02-19
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
相关资源
最近更新 更多