2016-07-10 10 views
-2

Ich studiere Java mit Hilfe von Online-Aufgaben und habe mich mit Methoden beschäftigt. Das Ziel ist, ein Programm zu schreiben, das eine Methode verwendet, die ein Jahr, einen Monat, einen Tag und ein ausgedrucktes Formular als Parameter hat. Dann druckt das Programm das gesamte Datum mit dem gewählten Format. Mit den Formaten, meine ich so etwas, normal: 10. Juli 2016/kürzen: 10.07.2016/amtlich: 10-07-16Java: Erhalte einen gewünschten Ausdruck/Ausgabe von meiner eigenen Methode

Mein Problem ist mir nicht ganz sicher wie ich das machen soll, aber so Bisher habe ich es so weit gebracht Ich habe versucht, String-Arrays für das normale Format zu verwenden, aber es scheint nicht zu funktionieren.

EDIT: Ich habe es irgendwie als intented zu arbeiten, aber es hat noch einige kleinere Probleme wie das letzte userinput alos am Ende gedruckt wird und ich nicht scheinen thrid Format (offical) recht arbeiten zu erhalten, wie intented weil es nicht die 0s vor den Werten unter 10 druckt.

Tut mir leid, wenn es nicht einfach zu verstehen ist, was ich versuche zu sagen, Englisch ist nicht meine Muttersprache.

Danke

public static int returnCorrectFormat(int year, int month, int day, int format) { 

     switch(format) 
    { 
     case 1: 
       switch (month) 
       { 
        case 1: System.out.println(day +"." + " January " + year); 
         break; 
        case 2: System.out.println(day +"." + " February " + year); 
         break; 
        case 3: System.out.println(day +"." + " March " + year); 
         break; 
        case 4: System.out.println(day +"." + " April " + year); 
         break; 
        case 5: System.out.println(day +"." + " May " + year); 
         break; 
        case 6: System.out.println(day +"." + " June " + year); 
         break; 
        case 7: System.out.println(day +"." + " July " + year); 
         break; 
        case 8: System.out.println(day +"." + " August " + year); 
         break; 
        case 9: System.out.println(day +"." + " September " + year); 
         break; 
        case 10: System.out.println(day +"." + " October " + year); 
         break; 
        case 11: System.out.println(day +"." + " November " + year); 
         break; 
        case 12: System.out.println(day +"." + " December " + year); 
         break; 
        default: 
         break; 
       } 
      break; 

     case 2: 
       System.out.println(day + "." + month + "." + year); 
       break; 

     case 3: if((day < 10) && (month < 10)) 
      { 
       System.out.println(year + "-" + "0" + month + "-" + "0" + day); 
      } 

     else{ 
       System.out.println(year + "-" + month + "-" + day); 
      } 
    } 
    return format; 
} 


public static void main(String[] args) { 

    try{ 

     int printableInfo; 
     int year; 
     int date; 
     int month; 
     int format; 

     System.out.println("The programm will ask you to input year,date, month and then choose a format for printing."); 
     System.out.println("Insert year: "); 
     year = input.nextInt(); 

     System.out.println("Insert date: "); 
     date = input.nextInt(); 

     System.out.println("Insert month: "); 
     month = input.nextInt(); 

     System.out.println("Choose format: [1] normal [2] shorten [3] official "); 
     format = input.nextInt(); 

     printableInfo = returnCorrectFormat(year,date,month,format); 
     System.out.println(printableInfo); 
    } 
    catch (Exception e) 
    { 
     System.out.println("ERROR: closing program.."); 
     System.exit(1); 
    } 
} 
+0

Bedingte oder switch-Anweisung, die auf Eingabe basiert? – DarkV1

+0

Es sollte Schalter-Format mit dem Format-Typ aus den Optionen sein, die der Endbenutzer will –

Antwort

0

Sie ein HashMap<> für Ihr „normales“ Format verwenden können, jede Zahl von 1 bis 12 würde ein Schlüssel sein und die Werte würden die entsprechenden Monate. Beispiel:

HashMap<Integer, String > monthMap = new HashMap<>(); 
monthMap.put(5,"May"); 
1

OK, das OP fehlt ein wenig Informationen darüber, was Sie versuchen, genau das aber trotzdem zu tun.

Beachten Sie Folgendes:

1) Ihre returnCorrectFormat Methode kein int zurückgeben sollte. Die Methode sollte alle Parameter verwenden, die zum Formatieren des Datums erforderlich sind, und dann mit dem Zurückgeben eines Strings mit dem formatierten Datum fortfahren.

2) Wie oben erwähnt, wird die Verwendung einer HashMap für Ihre Aufgaben effizient sein.

Genauer gesagt:

1) Sie erhalten eine Methode benötigen, die eine hashmap mit Schlüssel zurück - Objektwerte wie folgt:

1 "Januar" und so weiter.

Die Werte, die benötigt werden, um dieses hashmap zu erstellen, sind ein hartcodiertes String-Array mit Monatsnamen und ein hartcodiertes int-Array mit der Monatsnummer, die als Kartenschlüssel dient.

String[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", 
      "November", "December"}; 

    int[] numMothns = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 

Beide diese Array werden in Ihrer Hauptmethode platziert. Danach benötigen Sie die Methode, die die eigentliche HashMap erstellt.

public static HashMap<Integer, String> initMonthMap (int[] numM, String[] m) { 
     HashMap<Integer, String> monthsMap = new HashMap<>(); 

     for (int i = 0; i <= numM.length i++) { 
      for (int j = 0; j <= m.length; j++){ 
       monthsMap.put(numM[i], m[i]); 
      } 
     } 

     return monthsMap; 
    } 

Dies wird wirksam beide Schleifenanordnungen und steckte den Schlüssel - Wert, den Sie in der neuen HashMap brauchen werden und dann wieder zurück, um es Anrufer ist. Sie müssen diese Methode nach der Deklaration Ihrer Variablen von Ihrer Hauptmethode aus aufrufen.

Dann müssen Sie einige kleinere Änderungen in Ihrer Formatierungsmethode vornehmen. Genauer gesagt, anstatt eine Ganzzahl zurückzugeben (warum würden Sie das überhaupt machen?), Geben Sie eine Zeichenfolge zurück.Sie können einen StringBuilder verwenden, um Ihren neuen String zu erstellen. Außerdem wird die Signatur der Methode so geändert, dass sie die hashMap in ihre Parameterliste aufnimmt.

Außerdem, jetzt im Falle des "normalen" Formats, rufen Sie nur den Namen des Monats ab, basierend auf dem Schlüssel it (d. H. Das ist die Nummer des Monats).

public static String formatDate(int format ,int year, int month, int day, HashMap<Integer, String> monthsMap) { 
     StringBuilder sb = new StringBuilder(); 

     switch (format) { 
      case 1: 
       sb.append(day + " " + month + " " + year); 
       break; 
      case 2: 
       sb.append(day + "." + month + "." + year); 
       break; 
      case 3: 
       sb.append(day + " " + monthsMap.get(month) + " " + year); 
       break; 
     } 
     return sb.toString(); 
    } 

Dies sind mehr oder weniger die Änderungen, die Sie vornehmen müssen, damit dies funktioniert.

+0

Vielen Dank dafür, und ich weiß, dass mein Englisch nicht gut ist. Es gibt jedoch ein kleines Problem: Wenn ich die Aufgabe richtig verstanden habe, sollten alle Dinge unter einer Methode sein. Ich weiß, es klingt sehr geradlinig und ich habe mich auch selbst gefragt. Deshalb hatte ich ein Problem damit, einen Arbeitscode zu schreiben. – TRMN

+0

Konnten Sie den Link der Aufgabe, die Sie erwähnen, veröffentlichen? – Aris

+0

Es ist nicht in Englisch geschrieben, aber hier ist grobe Übersetzung: Schreiben Sie eine Methode, die Jahr, Monat, Tag und Ausgabeformat als Parameter verwendet. Die Methode druckt den Tag im gewünschten Format. – TRMN

0

java.time

Sie können die java.time Klassen in 8 Java gebaut verwenden und später, dies zu tun. Durchsuchen Sie Stack Overflow nach Tausenden von Beispielen.

Wenn diese Formate als kulturelle Normen für ein bestimmtes Gebietsschema definiert sind, lassen Sie java.time automatisch für Sie lokalisieren.

Definieren Sie zunächst einen DateTimeFormatter mit einem bestimmten Locale und einem FormatStyle.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); 
Locale locale = Locale.CANADA_FRENCH; 
formatter = formatter.withLocale(locale); 

Als nächstes auf einen Datumswert anwenden.

LocalDate localDate = LocalDate.of(2016 , Month.JULY , 10); 
String output = localDate.format(formatter); 

Wieder suchen Stack-Überlauf als Frage wirklich ein Duplikat viele anderen. Wenn dies eine Hausaufgabe ist, so dass Sie wirklich nicht wollen, um eine Bibliothek zu unterstützen, sollten Sie dies in Ihrer Frage sagen.

Verwandte Themen