2016-03-30 12 views
2
import java.util.* 
public class InheritancePart1 
{ 
    ArrayList<Date> dates = new ArrayList<Date>(); 
    dates.set(0, (1, 12, 1998)); 
    //Syntax error on token ",", Name expected after this token 
} 

Für dieses Programm habe ich ein Objektdatum definiert durch (int m, int d, int y) so für Beispiel (1, 1, 2000), und eine Unterklasse von Date namens LongDate, die durch definiert ist (String monthName, int d, int y), also zum Beispiel ("Januar", 1, 2000). Der Einfachheit halber habe ich beide Klassen weggelassen und nur die Hauptmethode gezeigt.Initialisieren Arraylist mit vom Benutzer erstellte Objekte/Eingabe von der Konsole

Mein Problem ist, dass ich ein Array vom Typ Datum, erstellen und dann diese Array mit mehreren Datum und Longdate Objekte bevölkern, und dann Methoden auf diesen Objekte aufrufen. Aber wenn ich versuche, ein Objekt der Date-Klasse einem Index der ArrayList zuzuweisen, erhalte ich die Fehlermeldung wie oben gezeigt.

Irgendwelche Ideen, warum das passiert/was mache ich falsch? Ich habe versucht,

dates.set(0, Date(1, 12, 1998)); 

, aber ich habe die gleiche Fehlermeldung. Außerdem habe ich versucht, es mit Scanner zu initialisieren, aber , die nicht funktionierte, gibt mir die gleiche Fehlermeldung.

Wenn mir jemand bei all diesen Dingen helfen könnte, würde ich es sehr schätzen.

+2

Verwenden 'dates.add (new Date (Jahr, Monat, Datum));'. –

+0

danke! Ich war mir nicht sicher über die Syntax, aber das half –

+0

Objekterstellung ist wirklich grundlegende Sachen. Ich schlage vor, dass Sie auf das Lernprogramm [Objekte] (https://docs.oracle.com/javase/tutorial/java/javaOO/objects.html) verweisen. –

Antwort

0

Sie müssen den Konstruktor als

new Date(year, month date) 

auch aufrufen, beachten Sie, dass Sie List.add eher verwenden als List.set, da Sie hinzufügen, nicht ersetzenden Elemente:

dates.add(new Date(year, month, date)); 

Beachten Sie, dass die Parameter year und month sind wahrscheinlich nicht das, was Sie erwarten (es ist ein lächerlich schlechte API) - ist die Zahl von Jahre seit 1900; month ist nullbasiert, also ist Januar null. Als solche würden Sie verwenden müssen:

dates.add(new Date(1998 - 1900, 12 - 1, 1)); 

ein Datum zu erstellen 1. Dezember 1998 darstellt

+0

Nun, ich habe Methoden in den LongDate und Date-Klassen, um damit umzugehen. Jahr, Monat und Tag stammen nicht von java.util.date, sondern von Eingabe.Ich nehme ein Objekt aus diesem Array und übergebe es an eine Methode, die 1998 als 1998 behandelt, nicht als das, was die API sagt. –

+0

Nun, das ist verwirrend. Sie importieren 'java.util.Date' (über den Platzhalter) und geben nicht an, dass Sie eine eigene' Date'-Klasse haben. –

+0

Ich habe das nur gemacht, weil ich faul war. In Wirklichkeit brauchte ich nur ArrayList und Scanner. Ich reparierte es aber, danke für die Eingabe –

0

Sie eine Liste von Terminen verwenden, so dass Sie die Methode add(...) und Weitergabe verwenden müssen als ein Parameter eine Instanz des Datums Klasse ..

So funktioniert Ihr Code nicht, weil Sie versuchen, in einer Liste etwas Seltsames, das ist nicht einmal eine Instanz der Date-Klasse ... SIE BRECHEN den Vertrag zwischen dem, was die Liste hält und was du hineinsteckst ...

die Lösung eines gültiges Date-Objekts ist das Hinzufügen ...

Beispiel der Kalender-Klasse:

List<Date> myDateList = new ArrayList<Date>(); 
myDateList.add(new Date()); 
final Calendar c1 = GregorianCalendar.getInstance(); 
c1.set(2014, 3, 30); // March 30th 2014 
// Date sDate = c1.getTime(); 
myDateList.add(c1.getTime()); 

     // print it 
     for (final Date d : myDateList) { 
      System.out.println(d); 
     } 
+0

NB: nicht Präfix Monate/Tage mit "0" - Sie werden Probleme, weil das ist eigentlich ein Oktal Literal. –

+0

danke @AndyTurner –

Verwandte Themen