java程序编译时不会出错,但不会运行
这是stackoverflow成员建议更改后的代码。代码编译时没有错误,但是当我运行“JavaRealtor11”时,我得到以下错误。我正在导入正确的库,因此不确定问题是什么 该程序的目标是读取两个值(第一行是字符串(John),第二行是double(100)),并通过一些计算将它们输出到JOption消息 线程“main”java.lang.NullPointerException中出现异常 位于sun.misc.FloatingDecimal.readJavaFormatString(未知源) 位于java.lang.Double.parseDouble(未知源) 在Realtor11.main(Realtor11.java:49)java程序编译时不会出错,但不会运行,java,Java,这是stackoverflow成员建议更改后的代码。代码编译时没有错误,但是当我运行“JavaRealtor11”时,我得到以下错误。我正在导入正确的库,因此不确定问题是什么 该程序的目标是读取两个值(第一行是字符串(John),第二行是double(100)),并通过一些计算将它们输出到JOption消息 线程“main”java.lang.NullPointerException中出现异常 位于sun.misc.FloatingDecimal.readJavaFormatString(未知源
}编译错误和运行时错误之间存在差异(这是事实) 试试这个,而不是while循环
String line = in.readLine();
if(line != null) {
seller = line;
}
line = in.readLine();
if(line != null) {
price = Double.parseDouble(line);
}
in.close();
编译错误和运行时错误之间存在差异(这是事实) 试试这个,而不是while循环
String line = in.readLine();
if(line != null) {
seller = line;
}
line = in.readLine();
if(line != null) {
price = Double.parseDouble(line);
}
in.close();
问题是这条线
while (in.read()!= -1);
这是一种“退化循环”,因为末尾有分号。它将继续从文件中读取,直到没有剩余内容可读取为止。在这之后,没有要解析的
双值。问题是这一行
while (in.read()!= -1);
这是一种“退化循环”,因为末尾有分号。它将继续从文件中读取,直到没有剩余内容可读取为止。在此之后,没有要分析的双值。请查看以下代码:
while (in.read()!= -1);
seller = in.readLine();
price = Double.parseDouble(in.readLine());
in.close();
第一行从读者那里读取所有内容,而不做任何处理。然后,当所有的东西都读过之后,你又在试着读一行。这显然会返回null,因为您已经阅读了所有内容。然后您尝试再次读取一行(当然会继续返回null),并将该null解析为double
最后,你关闭了阅读器,但是因为你没有在finally块中完成,所以之前抛出的NPE阻止了它的关闭
我认为是时候让您阅读您正在使用的方法的javadoc和JavaIO教程了
此外,要避免类似瘟疫的情况:
catch (IOException e) {}
您只是对自己隐藏异常,如果发生IOException,则无法进行任何诊断。请查看以下代码:
while (in.read()!= -1);
seller = in.readLine();
price = Double.parseDouble(in.readLine());
in.close();
第一行从读者那里读取所有内容,而不做任何处理。然后,当所有的东西都读过之后,你又在试着读一行。这显然会返回null,因为您已经阅读了所有内容。然后您尝试再次读取一行(当然会继续返回null),并将该null解析为double
最后,你关闭了阅读器,但是因为你没有在finally块中完成,所以之前抛出的NPE阻止了它的关闭
我认为是时候让您阅读您正在使用的方法的javadoc和JavaIO教程了
此外,要避免类似瘟疫的情况:
catch (IOException e) {}
您只是对自己隐藏异常,如果发生IOException,则无法进行任何诊断。这三行代码会导致错误:
while (in.read()!= -1); // this reads until EOF
seller = in.readLine(); // this gets a null-pointer since we're behind EOF
price = Double.parseDouble(in.readLine()); // same as above, This is the printed error.
这可能是:
seller = in.readLine(); // first line: seller
price = Double.parseDouble(in.readLine()); // second line: price
这是可以改进的:
seller = in.readLine(); // first line: seller
String sPrice = in.readLine(); // second line: price
if ( sPrice != null )
price = Double.parseDouble(sPrice);
这三行导致错误:
while (in.read()!= -1); // this reads until EOF
seller = in.readLine(); // this gets a null-pointer since we're behind EOF
price = Double.parseDouble(in.readLine()); // same as above, This is the printed error.
这可能是:
seller = in.readLine(); // first line: seller
price = Double.parseDouble(in.readLine()); // second line: price
这是可以改进的:
seller = in.readLine(); // first line: seller
String sPrice = in.readLine(); // second line: price
if ( sPrice != null )
price = Double.parseDouble(sPrice);
错误指向哪一行?是时候做一点调试了。考虑使用调试器或用大量的PrtLNS来喷洒代码。FYI—我从编译错误中显式地声明变量“价格”和“卖方”。但我认为这不重要,因为变量将根据文本文件的内容进行更新。当应用程序在需要对象的情况下尝试使用null时,会引发NullPointerException:正如@HoverCraftFullOfels建议的那样,您应该调试应用程序。错误不是自我解释的吗?你知道错误,你知道行号,你可以检查是什么导致了这种类型的错误。尝试调试。错误指向哪一行?是时候进行一点调试了。考虑使用调试器或用大量的PrtLNS来喷洒代码。FYI—我从编译错误中显式地声明变量“价格”和“卖方”。但我认为这不重要,因为变量将根据文本文件的内容进行更新。当应用程序在需要对象的情况下尝试使用null时,会引发NullPointerException:正如@HoverCraftFullOfels建议的那样,您应该调试应用程序。错误不是自我解释的吗?你知道错误,你知道行号,你可以检查是什么导致了这种类型的错误。尝试调试。为True,我修复了此问题。还是一样的错误。我正在整理其他评论。我是新来的,所以会继续研究的。大卫,好眼力。我不会意识到的。好吧,你是怎么修好的?您现在对Double.parseDouble
的调用是什么?调试部分修复的代码有点困难,不知道修复是什么;这意味着他读“sellers”,直到EOF和Double.parseDouble仍然为空,因为EOF已经达到了…是的,这似乎很有可能。是的,我解决了这个问题。还是一样的错误。我正在整理其他评论。我是新来的,所以会继续研究的。大卫,好眼力。我不会意识到的。好吧,你是怎么修好的?您现在对Double.parseDouble
的调用是什么?调试部分修复的代码有点困难,不知道修复是什么;这意味着他读“sellers”,直到EOF和Double.parseDouble仍然为空,因为EOF已经达到…是的,这似乎很有可能。谢谢Axel的EOF声明。现在我明白了为什么在第一行之后这些值不会被处理。谢谢Axel的EOF声明。现在我明白了为什么在第一行之后这些值不会被处理。我会说实话。我甚至没有研究“例外”部分。我在集中精力