我一直在使用Eclipse关注YouTube for Java的教程。
目前我正在尝试乘以两个双打并使用JOptionPane.showMessageDialog
将结果输出为double,但它给了我一个错误。
这是我的代码:
import javax.swing.JOptionPane;
public class Variables {
public static void main(String arg[])
{
double length = 3;
double width = 2;
double area = length*width;
JOptionPane myIO = new JOptionPane();
myIO.showMessageDialog(null, area);
}
}
和错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method showMessageDialog(Component, Object) in the type JOptionPane
is not applicable for the arguments (null, double)
at Variables.main(Variables.java:11)
我正是在教程中看到的,所以我不知道我做错了什么。我觉得我没有导入一些我应该拥有的库或东西,但似乎Eclipse识别JOptionPane
和showMessageDialog
。
将您的主要内容更改为:
public static void main(String arg[])
{
double length = 3;
double width = 2;
double area = length*width;
JOptionPane.showMessageDialog(null, area);
}
使用JOptionPane
时,我们不需要任何声明。
这段代码有很多问题,我建议你阅读official Java tutorials而不是你看过的那个。
首先,您甚至不应该尝试运行无法编译的代码。在Eclipse中打开Problems视图,如果此视图中列出了一个编译错误,甚至不要考虑运行代码。
然后阅读编译器错误消息并尝试理解它们以解决它们。这里的问题是你可能正在使用一个非常非常旧的JDK版本(Java 5之前版本),它不会自动将原语(double)打包到它们的包装器类型(Double)中。下载最新版本的JDK,并配置eclipse以使用这个新版本。
但还有其他问题:
尝试将double area
更改为Double area
。
double
是一个原始的,因此不会继承Object
,这是showMessageDialog
期望的参数类型。
Double
是double
的包装类,并且作为所有对象,继承了Object
。
Java从Double
转换为double
通常没有问题,反之亦然,但它采用Object
类型的参数这一事实可能意味着你实际上并不想做你所做的事情。
我会注意到这适用于NetBeans(Java 7)和IDEOne(Java 6)(除了预期的运行时错误),因此Eclipse可能在这里出错,或者您使用的是旧版本的Java。说到Java,你应该总是运行最新的,除非你有特殊的理由不这样做。 Forward-compatibility只是一个例外的问题。
像这样将int类型转换为double区域:
import javax.swing.JOptionPane;
public class Variables {
public static void main(String arg[])
{
double length = 3;
double width = 2;
double area = length*width;
JOptionPane myIO = new JOptionPane();
JOptionPane.showMessageDialog(null, (int)area);
}
}