我遇到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类型的变量。
答案 0 :(得分:0)
您需要初始化 varvar A,B和C以包含您的类的实例。
在任何情况下,如果您想让类对象与类型相关联,请使用
varvar.class.getSimpleName()
与变量A,B和C相关联的类是 varvar 或其子类。
另外,目前还不清楚你的意思是删除'他们。您似乎将变量设置为null。
提示更好的易读性:类名称应以大写字符开头,变量应以小写字符开头。
答案 1 :(得分:0)
Java是一种区分大小写的语言。 B和b不是一回事。在您的示例中,B从未设置,因此它为null。
Java有反思,所以所有使用Strings的体操都会弄乱代码。相反,试试这个:
if(Integer.isInstance(B)){B = null;}
当你看到这个,并且事先知道(作为代码的编写者)B是varvar的一个实例时,你会发现代码是无意义的,因为varvar类型的对象永远不能是Integer类型
我不确定你要在这里完成什么,所以我不能给你更多的投入。