2016-04-21 8 views
-4

Wenn ich den folgenden Code ausführen bekomme ich die Fehler - Exception in thread "main" java.lang.Error: Ungelöste Kompilation Problem:Java Fehler: ungelöst Kompilierung

at homework6.main(homework6.java:6) 

ich recherchiert, warum dies geschehen könnte und In vorherigen Antworten wurde gesagt, dass der Klassenname benötigt wird, um den Namen der Java-Datei zu finden, meine Klasse entspricht auch der der .java-Datei. Ich habe auch versucht, "void" und die gesamte Aussage vollständig zu entfernen, aber dann trat ein neuer Fehler auf und sagte, dass ich public void main (String [] args) brauchte. Begegne ich einem anderen Problem als der Klasse und .java?

public class homework6 { 

    public static void main(String[] args) { 

     class Date { 
      private int month; 
      private int day; 
      private int year; 
      private String name; 

      public Date() { 

      } 

      { 
       month=1; 
       day = 1; 
       year = 2001; 
       name = "January"; 
      } 

      public Date(int m, int d, int y) { 
       setDate(m, d, y); 
      } 

      public void setDate(int m, int d, int y) { 
       month = m; 
       day = d; 
       year = y; 

       if (m ==1) 
        name="January"; 
       else if(m == 2) 
        name="February"; 
       else if(m == 3) 
        name="March"; 
       else if(m == 4) 
        name="April"; 
       else if(m == 5) 
        name = "May"; 
       else if(m == 6) 
        name = "June"; 
       else if(m == 7) 
        name = "July"; 
       else if(m == 8) 
        name = "August"; 
       else if(m == 9) 
        name = "September"; 
       else if(m == 10) 
        name = "October"; 
       else if(m == 11) 
        name="November"; 
       else if(m == 12) 
        name = "December"; 
      } 

      public void showDate1() { 
       System.out.println(month + "/" + day + "/" + year); 
      } 

      public void showDate2() { 
       System.out.println(name + "" + day + "," + year); 
      } 

      public void showDate3() { 
       System.out.println(day + "" + name + "" + year); 
      } 

     } 
    } 
} 
+0

Sie können keine Klasse innerhalb einer Funktion haben. Setzen Sie es stattdessen außerhalb Ihrer Funktion. – Majora320

+0

Ich habe Ihren Code einfach in eine Datei mit dem Namen 'homework6.java' kopiert - mit dieser exakten Groß- und Kleinschreibung. Es lief auch ohne Fehler, obwohl es nichts getan hat, da das einzige, was Ihre main() -Methode macht, eine Klasse zu deklarieren (nicht instanziieren, geschweige denn irgendwelche Methoden aufrufen). – yshavit

Antwort

0

Sie sind eine Klasse nisten, Date, in einem Verfahren, um die wichtigste Methode genau zu sein - etwas, das man nicht und tun sollte nicht können.

Lösung: Tun Sie dies nicht.

Erstellen Sie eine Datei mit dem Namen Date.java, und fügen Sie Ihren Date-Klassencode ein.
Erstellen Sie eine zweite Datei namens Homework6.java und legen Sie Ihre Hauptmethode darin.

Fertig.

+0

Das ist falsch - Sie können eine Klasse innerhalb einer Methode verschachteln. Ich habe das gerade jetzt überprüft und das auf 1.8 verifiziert, obwohl ich mir fast sicher bin, dass es auch in 1.7 stimmt und wer es früher weiß. – yshavit

0

Gültige Punkte in der Antwort. Sie könnten die Klasse auch einfach außerhalb des Hauptverzeichnisses platzieren und zum Kompilieren bringen.

Wenn Sie jedoch einen Schritt zurückgehen und davon ausgehen, dass Sie diesen Code kompilieren, was wäre die erwartete Ausgabe? Sie scheinen keine Methoden anzurufen. Möchtest du einen Moment damit verbringen, deine Logik zu verstehen?

+0

Wie würdest du vorschlagen, dass ich die Klasse außerhalb der Hauptschule stelle? Ziehe ich vom Klassendatum zu "name =" Januar? " –

0

Wahrscheinlich aus diesem Grund:

public Date() { 

} 

{ 
    month=1; 
    day = 1; 
    year = 2001; 
    name = "January"; 
} 

Die ersten beiden Klammern sollten entfernt werden, da der Code zwischen den zweiten zwei nicht in einer Methode ist. So sollte es so sein:

public Date() { 
    month=1; 
    day = 1; 
    year = 2001; 
    name = "January"; 
}