尝试比较具有变量类型的类的实例时出错

时间:2015-01-17 02:49:32

标签: java eclipse if-statement nullpointerexception null

我遇到Java Nullpointer异常的问题。所以基本上我正在制作一个代码,要求用户输入X数据,然后根据他输入的数据类型,将它们作为相应的变量类型添加,同时将其与其他先前存在的变量进行比较。

    varvar A;
    varvar B;
    varvar C;
    System.out.println("Choose what to do:");
    System.out.println("1. Set variable A");
    System.out.println("2. Set variable B");
    System.out.println("3. Set variable C");
    b = src.nextInt(); //next int into variable b

if(b==1){

    while (src.hasNext()) { //Next thing the user is going to input

          if (src.hasNextInt()) { // If it's an integer, do this :

              if("Integer".equalsIgnoreCase(B.getClass().getSimpleName())){B = null;};
              if("Integer".equalsIgnoreCase(C.getClass().getSimpleName())){C = null;};

这最后两行基本上就是我正在努力的方向。 B和C是类varvar实例。我试图删除B和C,因为它们的现有内容是一个Integer变量。但每当我添加这两行时,我得到一个Nullpointer异常。这是早期的varvar类代码:

              public static class varvar {
    int x;
    boolean y;
    double z;

    public varvar (int x){
        this.x = x;
    }

    public varvar (boolean y){
        this.y = y;
    }

    public varvar (double z){
        this.z = z;
    }

有人能帮帮我吗?我试图找到一种方法来比较B和C变量类型与Integer,并删除它们,如果它们确实包含Integer类型的变量。

2 个答案:

答案 0 :(得分:0)

您需要初始化 varvar A,B和C以包含您的类的实例。

在任何情况下,如果您想让类对象与类型相关联,请使用

varvar.class.getSimpleName()

与变量A,B和C相关联的类是 varvar 或其子类。

另外,目前还不清楚你的意思是删除'他们。您似乎将变量设置为null。

提示更好的易读性:类名称应以大写字符开头,变量应以小写字符开头。

答案 1 :(得分:0)

  1. Java是一种区分大小写的语言。 B和b不是一回事。在您的示例中,B从未设置,因此它为null。

  2. Java有反思,所以所有使用Strings的体操都会弄乱代码。相反,试试这个:

    if(Integer.isInstance(B)){B = null;}

  3. 当你看到这个,并且事先知道(作为代码的编写者)B是varvar的一个实例时,你会发现代码是无意义的,因为varvar类型的对象永远不能是Integer类型

    我不确定你要在这里完成什么,所以我不能给你更多的投入。