我刚刚下载了JDK,安装了JGrasp,并且正在尝试编写我的第一个Java程序(三角形的斜边)。这是我的计划:
public class Hypot {
public static void main(String args[]) {
double hypotenuse;
double d1;
double d2;
if (args.length != 2) {
System.out.println("You need to enter two arguments!");
System.exit(1);
}
try {
d1 = new Double.parseDouble(args[0]);
d2 = new Double.parseDouble(args[1]);
} catch (NumberFormatException nfe) {
System.out.println("Arguments need to be numbers!");
System.exit(2);
}
hypotenuse = Math.sqrt((d1 * d1) + (d2 * d2));
System.out.print("The hypotenuse of the right angle triangle with sides of " + d1 + "and" + d2 + "is" + hypotenuse);
}
}
我得到了这两个错误;我真的不明白它们是什么。
Hypot.java:16: error: cannot find symbol d1= new Double.parseDouble(args[0]); ^ symbol: class parseDouble location: class Double Hypot.java:17: error: cannot find symbol d2= new Double.parseDouble(args[1]); ^ symbol: class parseDouble
答案 0 :(得分:3)
这是一个静态方法,不要写新的。您只使用new来实例化类。 “parseDouble”不是内部类,所以你不能使用new。方法刚刚被调用。 “工厂模式”使用静态方法返回实例,这意味着静态方法包含实例化(新的)。
答案 1 :(得分:2)
Double.parseDouble是一种静态方法,因此您无需实例化Double
即可使用parseDouble
。话虽如此,如果你想调用Double的非静态方法,它看起来像new Double(string).doubleValue();
d1= Double.parseDouble(args[0]);
d2= Double.parseDouble(args[1]);
答案 2 :(得分:0)
本声明中的问题
d1= new Double.parseDouble(args[0]);
是您尝试创建从parseDouble
因此在编译期间,此声明正在变为
d1 = new double;
这在语法上是不正确的。
因为parseDouble返回一个double,所以你可以简单地分配给你的d1双变量而不使用new
运算符:
d1 = Double.parseDouble(args[0]);
另请注意,要访问static
变量/方法,您不必创建类的实例。您可以使用类名访问它们,例如:Double.parseDouble(args [0]);
修改强>
试试这个:
public class Hypot{
public static void main(String args[])
{
double hypotenuse;
double d1 = 0.0d;
double d2 = 0.0d;
if(args.length!=2)
{
System.out.println("You need to enter two arguments!");
System.exit(1);
}
try
{
d1= Double.parseDouble(args[0]);
d2= Double.parseDouble(args[1]);
}
catch(NumberFormatException nfe)
{
System.out.println("Arguments need to be numbers!");
System.exit(2);
}
hypotenuse=Math.sqrt((d1*d1)+(d2*d2));
System.out.print("The hypotenuse of the right angle triangle with sides of "+d1+"and"+d2+"is"+hypotenuse);
}
}