2016-03-19 4 views
-2

Hier ist mein Kalender-Programm, wie Sie unten sehen können:Kalender-Programm erforderliche Unterstützung in Java

public class calendar 
{ 
    public static void main (String args[]) 
    { 
     new calendar(); 
    } 


    public calendar() 
    { 
    int day = IBIO.inputInt ("Enter day: "); 
    int numOfDays = IBIO.inputInt ("Enter the number of days in the month: "); 

    System.out.println ("S M T W T F S"); 
    if (day==1) 
    { 
     for (int i=1; i<=7; i++) 
     { 
     System.out.print (i + " "); 
     } 
     } 
    else if (day==2) 
    { 
     System.out.print (" "); 
     for (int i = 1; i <=6; i++) 
     { 
     System.out.print (i+" "); 
     } 
     } 
    else if (day==3) 
    { 
     System.out.print ("  "); 
     for (int i = 1; i <=5; i++) 
     { 
     System.out.print (i+" "); 
     } 
     } 
    else if (day==4) 
    { 
     System.out.print ("   "); 
     for (int i = 1; i <=4; i++) 
     { 
     System.out.print (i+ " "); 
     } 
     } 
    else if (day==5) 
    { 
     System.out.print ("   "); 
     for (int i = 1; i <=3; i++) 
     {  
     System.out.print (i+" "); 
     } 
     } 
    else if (day==6) 
    { 
     System.out.print ("    "); 
     for (int i = 1; i <=1; i++) 
    { 
     System.out.print (i + " "); 
    } 
    } 
    else 
    { 
     System.out.print ("     "); 
     for (int i = 1; i <= 1; i++) 
     { 
     System.out.print (i+ " "); 
     } 
    } 
    } 
    } 

Nun, was ich tun möchte, ist zu diesem Programm erweitert auf, da nur die erste Zeile ausgegeben wird. Ich möchte, dass der gesamte Monat ausgegeben wird, und dies muss der Anzahl der Tage entsprechen, die der Benutzer über die Variable numOfDays eingibt. Übrigens, IBIO.input ist, wie der Benutzer die Eingabe speichert.

+2

Haben Sie bemerkt, ein Muster in Ihrem Code, den Sie vielleicht vereinfachen könnten? – dovetalk

Antwort

0

Ihr Code wirklich kompliziert ist. Ich glaube nicht, mein die beste entweder, aber hier ist es:

public calendar() { 
    int day = 2; 
    int numOfDays = 28; 

    System.out.println("S M T W T F S"); 
    for(int i = 1; i < day; i++){ 
     System.out.print(" "); 
    } 
    for(int i = 1; i <= numOfDays; i++){ 
     System.out.print(addSpaces(i + "", 3)); 
     if((i + day - 1) % 7 == 0){ 
      System.out.print("\n"); 
     } 
    } 
} 

public String addSpaces(String s, int length){ 
    while(s.length() < length){ 
     s+= " "; 
    } 
    return s; 
} 

versuchen, dies zu verstehen, ist es zunächst einige Räume druckt die ersten Tage zu überspringen, dann alle Tage ausdruckt und jeden siebten Tag, Es beginnt eine neue Zeile.

Die Ausgabe lautet:

S M T W T F S 
    1 2 3 4 5 6 
7 8 9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 
+0

Das funktioniert, danke :) – asdfghjkl9999

+0

Kein Problem, ich bin im Urlaub und wirklich gelangweilt ^^ – dieckie

+0

Können Sie mir helfen, mein nim-Programm auch zu beheben? – asdfghjkl9999

0

Von dem, was ich verstanden habe, versuchen Sie, einen Kalender zu drucken, indem Sie die Anzahl der Tage und den Starttag als Eingabe vom Benutzer nehmen.

Mit der von Ihnen geschriebenen Logik wird nur die erste Zeile gedruckt, da es keine loop oder gibt. Was Sie stattdessen tun sollten, druckt alle Zeilen mit einem loop. Hier

ist der Code-Schnipsel:

public class calendar 
{ 
    public static void main (String args[]) 
    { 
     new calendar(); 
    } 

    public calendar() 
    { 
     int day = IBIO.inputInt ("Enter Day (Number): "); 
     int numOfDays = IBIO.inputInt ("Enter the number of days in the month: "); 
     StringBuilder sb = new StringBuilder(); 

     System.out.println("S M T W T F S"); 
     char[] spaces = new char[(day - 1) * 3]; 
     Arrays.fill(spaces,' '); 

     sb.append(spaces);  
     for(int i = 1; i <= numOfDays; i++) { 
      if(sb.length() > 19) { 
       System.out.println(sb.toString()); 
       sb = new StringBuilder(); 
      } 

      sb.append(i); 
      if(i/10 < 1) { 
       sb.append(" "); 
      } else { 
       sb.append(" "); 
      } 
     } 
     System.out.println(sb.toString()); 
    } 
} 

Eingang:

Enter Day (Number): 2 
Enter the number of days in the month: 31 

Ausgang:

S M T W T F S 
    1 2 3 4 5 6 
7 8 9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 29 30 31 
0

Hier ist eine andere Variante ist.

static void cal(int day, int numOfDays){ 
    System.out.println(" S M T W T F S"); 
    for(int d = 2 - day; d <= numOfDays; ++d){ 
     System.out.print((d <= 0 ? " " : d <= 9 ? " " + d : d) 
          + " "); 
     if(d%7 == (8-day)%7) System.out.println(); 
    } 
    System.out.println(); 
} 

Die Idee ist, ein wenig ausgeflippt: verlängert die Tage des Monats in die Nicht-Positiven den anfänglichen Einzug zu vermeiden. Durch das Zählen der gedruckten Positionen und das Auslösen von println wird die heikle Bedingung mit zwei Modulo-Operationen vermieden.

(es ist nicht eine gute Codierung der Praxis werden solche Dinge in einem Konstruktor zu tun.)

Verwandte Themen