Fehlercode

fabfre

Neues Mitglied
Hallo,
in diesem Code sollen 6 Fehler sein.

Java:
import java.util.Scanner ;
public class Aufgabe1 {
    public static void main (String x) {
         double [] d = methode1 ();
         methode2 (d);
         System.out.println(methode3 (d));
       }

     public static void methode1 () {
          Scanner s = new Scanner (System.in);
          double [] d;
          int i = 2;
          do {
             double d1 = s.nextDouble ();
             if (d1 < 0) {
                  d[i] = -d1;
             } else {
                  d[i] = d1;
             }
       } while (i-- > 0)
    return d;
}

      public static void methode2 (double [] d) {
           for (int i = 0; i < d.length + 1; i++) {
               for (int j = i + 1; j < d.length ; j++) {
                     if (d[i] > d[j]) {
                         d[i] += d[j];
                          d[j] = d[i] - d[j];
                          d[i] -= d[j];
                    }
              }
         }
   }

      public static String methode3 (double [] d) {

            for (int i = 0; i < d.length ; i++) {
                 s += d[i] + "\t";
         }
         return s;
    }
}

Ich habe bereits diese gefunden:
Zeile 3: fehlt [] nach String.
Zeile 9: muss double[] heißen, anstatt void.
Zeile 25: d.length - 1, anstatt +1.

Dann sehe ich noch in Zeile 20 und in Zeile 39 einen Fehler, aber weiß nicht wie diese verbessert gehören. Nach while(...) muss doch eigentlich eine geschweifte Klammer kommen, oder? Und wie wird dieses String s initalisiert?
Ich danke euch schon einmal für eure Mühe :toll:
Fabi
 
G

Gonzo17

Gast
In Zeile 20 müsste eine Meldung wie folgende kommen:
Code:
Syntax error on token ")", ; expected after this token
Sagt eigentlich alles aus.

In Zeile 39 wird eine Variable
Code:
s
verwendet, die vorher nie deklariert wurde. Du könntest zum Beispiel vor der for-Schleife einfach
Code:
String s = null;
schreiben.
 

Landei

Top Contributor
Es gibt nicht nur [c]while(...) {...}[/c], sondern auch [c]do { ... } while(...)[/c]. In methode3 sollte Zeile 39 korrekt sein (String-"Addition" ist besonders, weil vorher andere Typen automatisch umgewandelt werden), aber s ist nirgendwo definiert: In Zeile 37 gehört also etwas wie [c]String s = "";[/c].
 
T

Trolllllll

Gast
Wie kommst du denn darauf?

Da du
Code:
String s = null;
geschrieben hattest, wenn man dann darauf mit
Code:
+=
zugreifen will, gibt es die null-Pointer exception, da die Variable s nach null zeigt, richtig wäre
Code:
String s = "";
wie schon erwähnt wäre. Würde in Zeile 39 nur
Code:
s=...
stehen würde es so gehen, wie du es beschrieben hast.
 

Bernd Hohmann

Top Contributor
Zeile 3: public static void main(String x[]) (main erwartet ein String-Array sonst wird es nicht erkannt)
Zeile 9: public static double[] methode1 ()
Zeile 11: double[] d=new double[3]; (es fehlte die Initialisierung)
Zeile 20: } while (i-- > 0); (abschliessendes Semikolon)
Zeile 25: for (int i = 0; i < d.length - 1; i++) {
Zeile 37: String s = "";

Bernd
 
G

Gonzo17

Gast
Java:
public class Test {
	public static void main(String[] args) {
		String s = null;
		for (int i = 0; i < 10; i++) {
			s += i + "/";
		}
		System.out.println(s);
	}
}

Code:
null0/1/2/3/4/5/6/7/8/9/

Also ja, unerwartetes Ergebnis. Aber nein, keine NullPointerException. Deswegen eben besser mit leerem String initialisieren oder gleich StringBuilder.
 
T

Trolllllll

Gast
Ok, damit hätte ich wirklich nicht gerechnet, ich hätte eher wie ja schon geschrieben die nullPointerException erwahrtet.
Aber ja generell sollte man einen String immer mit
Code:
=""
initialisieren
 

Bernd Hohmann

Top Contributor
Also ja, unerwartetes Ergebnis.

So unerwartet ist das gar nicht da das Anhängen eines "null" Objektes bei Strings schon immer den Text "null" gebracht hat.

Java:
Object o = null;
System.out.println("A" + o + "B");
System.out.println("A" + null + "B");

Code:
AnullB
AnullB

Da gibt es viele Stellen in der Runtime, die das organisieren:

String:
Java:
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

AbstractStringBuilder (früher StringBuffer):
Java:
    public AbstractStringBuilder append(String str) {
        if (str == null) str = "null";

    public AbstractStringBuilder append(StringBuffer sb) {
        if (sb == null) return append("null");

    public AbstractStringBuilder append(CharSequence s) {
        if (s == null) s = "null";

usw..

Bernd
 

Landei

Top Contributor
Ich hatte irgendwie sowas im Hinterkopf...
Java:
Double x = null;
Double y = 42.0;
Double z = x + y; //Peng!
... aber Strings bekommen ja eine Extrabratwurst gebraten - als hätte null eine toString()-Methode.
 

Bernd Hohmann

Top Contributor
... aber Strings bekommen ja eine Extrabratwurst gebraten - als hätte null eine toString()-Methode.

Das liegt in der Natur von primitiven Datentypen.

Aber ohne diese Extrawurst könnten wir zu viele Debugausgaben mitsamt den Debuggern auf den Müll werfen.

Oder prüfst in deinem .toString() wirklich jedes Objekt ob es wirklich "null" ist ehe Du den String zusammenklebst? :D

Bernd
 

Neue Themen


Oben