2013-11-05 21 views
5

Ich arbeite an einer wirklich einfachen Point-Klasse, aber ich bekomme einen Fehler und ich kann nicht feststellen, wo das String/Doppel-Problem passiert oder wie es zu beheben ist.Unzulässiges Argument Ausnahme

public String getDistance (double x1,double x2,double y1,double y2) { 

      double X= Math.pow((x2-x1),2); 
      double Y= Math.pow((y2-y1),2); 

      double distance = Math.sqrt(X + Y); 
      DecimalFormat df = new DecimalFormat("#.#####"); 

      String pointsDistance = (""+ distance); 

      pointsDistance= df.format(pointsDistance); 

      return pointsDistance; 
     } 

und der Testcode

double x1=p1.getX(), 
         x2=p2.getX(), 
         y1=p1.getY(), 
         y2=p2.getY(); 

      pointsDistance= p1.getDistance(x1,x2,y1,y2); 

EDIT

ich den Fehler hinzufügen, vergessen zu Ich erhalte:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Number 
at java.text.DecimalFormat.format(Unknown Source) 
at java.text.Format.format(Unknown Source) 
at Point.getDistance(Point.java:41) 
at PointTest.main(PointTest.java:35) 
+1

Glücklicherweise müssen Sie den Fehler nicht genau lokalisieren, da Ihr Compiler das für Sie tun wird ... Wo sind 'p1',' p2' und 'pointsDistance' definiert? Welcher Typ ist 'p1' und' p2'? Ich nehme an, dass "pointsDistance" eine "Zeichenfolge" ist. Was gibt 'getX()' und 'getY()' zurück, für welchen Objekttyp 'p1' und' p2'? Welche Zeile ist 'Point.java, Zeile 41'? Was ist 'PointTest.java Zeile 35'? – nhgrif

+0

pointsDistance = p1.getDistance (x1, x2, y1, y2); ist Linie 35 – user2954611

+0

pointsDistance = df.format (pointsDistance); Zeile 41 lautet – user2954611

Antwort

3

Sie eine String vergangen, aber the format method erwartet eine double und gibt eine String zurück. Wechsel von

String pointsDistance = (""+ distance); 
pointsDistance= df.format(pointsDistance); 

zu

String pointsDistance = df.format(distance); 
+0

ersetzte es und immer noch den gleichen Fehler .... – user2954611

+0

Ich habe Ihre 'getDistance' Methode mit meiner Änderung ausgeführt, und ich bekomme nicht mehr den Fehler. – rgettman

+0

Technisch gibt es ein 'format', das' Object' als Parameter übernimmt (geerbt von 'Format'). Daher der Laufzeitfehler anstatt zu kompilieren. –

1

diese ersetzen:

String pointsDistance = (""+ distance); 

pointsDistance= df.format(pointsDistance); 

mit:

String pointsDistance = df.format(distance); 

Das Problem ist, dass Ihr Zahlenformat nicht einen String akzeptiert.

+0

ersetzt es und wirft immer noch den gleichen Fehler .... – user2954611

+0

@ user2954611 - Haben Sie das Argument in 'df.format()' geändert? Es ist wichtig, ein "double", nicht ein "String" zu übergeben. –

1

Das Problem ist, dass die format Methode einen numerischen Wert, nicht String nimmt. Versuchen Sie Folgendes:

public String getDistance(double x1, double x2, double y1, double y2) { 
    double X = Math.pow((x2-x1), 2); 
    double Y = Math.pow((y2-y1), 2); 

    double distance = Math.sqrt(X + Y); 
    DecimalFormat df = new DecimalFormat("#.#####"); 

    String pointsDistance = df.format(distance); 
    return pointsDistance; 
} 
1

Verwenden

String pointsDistance = df.format(distance); 

als das Format Verfahren ein double und kein string erwartet.

Verwandte Themen