无法绕过Java中的简单错误

时间:2013-08-28 16:31:17

标签: java

我刚刚下载了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

3 个答案:

答案 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

返回的原始double的实例

因此在编译期间,此声明正在变为

 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);
  }
 }