verzweigungen und schleifen

Synethic

Mitglied
Hallo ich hab heute schonmal eine Spitzen antwort von euch bekommen und deswegen frag ich euch nochmal um eure Hilfe da ich total anstehe!

Ich habe folgende aufgabe zu lösen:

"Erstellen Sie ein Programm, das mit dem gegebenen letzten Tag des Vorjahres alle Sonntage ausgiebt, die auf den ersten Tag eines Monates fallen. Verwenden Sie Zahlen von 1 (Montag) bis 7 (Sonntag) für die Tage und 1 (Januar) bis 12 (Dezember) für die Monate"

Habt ihr eine Idee wie ich das realisieren könnte! Ich bin echt überfordert!


DANKE im vorraus!
 

ARadauer

Top Contributor
Du warst mit dem simplen vergleichen von zwei Zahlen schon überfordert! Willst du nicht mal einen Blick in deine Lehrbuch oder deine Unterlagen werfen und dir das selber beibringen?
Bei deinem Vorgehen wird das ein langes Semester für dich!
 

Synethic

Mitglied
ich hab leider keine Unterlagen hab nur 4 Aufgaben bekommen und die probieren zu lösen! wenn ich es schaffe muss mir ein freund von mir am wochenende ein Bier zahlen (war ne wette von uns) etwas. ^^ ich selbst bin kfz-mechaniker!

trotzdem danke!
 

ARadauer

Top Contributor
mhn ein Bier... schlecht... wären es zwei, hättest du eins mir bezahlt und die aufgaben dafür bekommen ;-)

"Erstellen Sie ein Programm, das mit dem gegebenen letzten Tag des Vorjahres alle Sonntage ausgiebt, die auf den ersten Tag eines Monates fallen. Verwenden Sie Zahlen von 1 (Montag) bis 7 (Sonntag) für die Tage und 1 (Januar) bis 12 (Dezember) für die Monate"
Calendar wirst du wahrscheinlich nicht benutzen dürfenm oder? Weißt du, welcher Wochentag ger gegebene Tag ist?
 

Haave

Top Contributor
Und der genaue Wortlaut der Wette ist "Bis zum Wochenende die User eines Java-Forums dazu bringen, die Aufgaben für dich zu schreiben"? :autsch:

Ich würd mich ja nicht trauen, mit was zu wetten, was ich nicht kann…
 

Purgator

Aktives Mitglied
Aloha,
also du hast den Beginn-Wochentag ja gegeben (letzter Tag des Vorjahres).
Wenn du es hässlich (aber vllt. einfach zu verstehen als Anfänger) machen willst gehst du manuell vor:
Du willst zuerst schauen ob der 1. Januar ein Sonntag war. Dazu testest du einfach ob der Tag, nach dem letzten Tag des vorjahres ein Montag war.
Wenn ja, gib das Datum aus.
Danach gehe 31 Tage weiter und teste ob das ein Sonntag war... etc. einfach alle Monate durchgehen.

Um mehrere Tage weiter zu gehen und trotzdem im Wochenzyklus zu bleiben kannst du den Modulo Operator nutzen. Der gibt dir den Rest von einer ganzzahligen Division aus.
So ist z.B. 8 mod 7 = 1.
Angenommen du hättest die Darstellung
Montag = 0
Dienstag = 1
...
Sonntag = 6
Kannst du einfach mit Modulo 7 rechnen.
Wäre z.B. der 1. Januar ein Freitag, und würdest wissen wollen ob der 1. Februar ein Sonntag ist, so könntest du wie folgt rechnen:
(4+31) mod 7 = 0
d.h. der erste Februar ist ein Montag.
Die Aufgabenstellung verstehe ich nicht ganz - vorallem weil da vorgegeben wurde das da mit 1 beim zählen begonnen wird. Entweder du gibst bei der Ausgabe einfach immer (+1) an, oder du rechnest das intern um, um trotzdem den Modulo Operator zu Nutzen.

Hoffe ich habe es halbwegs verständlich gehalten und nicht selber etwas falsch verstanden.
 

timbeau

Gesperrter Benutzer
So, noch nie mit Datum gearbeitet aber so funktionierts in meiner Lösung:

Java:
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class JavaCalenderFirstDays {

    public static void main(String[] args) {
        System.out.println("Geben Sie bitte das Jahr ein: ");
        Scanner scanner = new Scanner(System.in);
        int jahr = scanner.nextInt();
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.YEAR, jahr);
        DateFormatSymbols dfs = new DateFormatSymbols();
        DateFormat df = DateFormat.getDateInstance(DateFormat.YEAR_FIELD  );
        String[] dayOfWeek = dfs.getWeekdays();
        for (int month = Calendar.JANUARY; month <= Calendar.DECEMBER; month++) {

            for (int tag = cal.getActualMinimum(Calendar.DAY_OF_MONTH); tag <= cal
                    .getActualMaximum(Calendar.DAY_OF_MONTH); tag++) {
                cal.set(Calendar.MONTH, month);
                cal.set(Calendar.DAY_OF_MONTH, tag);
                if(tag == cal.getActualMinimum(Calendar.DAY_OF_MONTH) && dayOfWeek[cal.get(Calendar.DAY_OF_WEEK)].equals("Sonntag")){
                    System.out.print((dayOfWeek[cal.get(Calendar.DAY_OF_WEEK)]) + " ");
                    System.out.println(df.format(cal.getTime()));
                }
                


            }
        }

    }

}
 

nrg

Top Contributor
@timbeau: ich glaube es soll eher eine ganz primitive (und damit meine ich die Datentypen :)) bzw. mathematische Lösung werden

@to: bedenke auch schaltjahre (für den Fall, dass das Jahr mit angeben wird. wenn nicht, bleibt eh die Frage offen, wie man den Februrar handhaben soll..)
 

Synethic

Mitglied
Es sollte eig. ohne Kalender sein da es ja um Schleifen und so geht! Steht so in der Übung!
Das mit dem Mathematischen Weg ist schon gut nur weiß ich leider nicht wie ich es umsetzten soll!
 

timbeau

Gesperrter Benutzer
@nrg: Hab nicht mehr reingeguckt, daher hab ich das nicht beachtet.

Letzendlich aber unmöglich ohne Kalender wenn man auch Jahre betrachtet in der Zeit in der alle möglichen Änderungen durchgeführt wurden. Tage weglassen, Monate etc.
 

Michael...

Top Contributor
Für eine Scherzwette könnte die Antwort ja wie folgt aussehen:
Java:
import java.util.Scanner;

public class SundayOnFirst {
	public static void main(String[] s) {
		int[] days = {1, 2, 2, 1, 2, 1, 2, 2, 1, 3, 1, 1, 3};
		System.out.println("Geben Sie bitte das Jahr ein: ");
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();
        if (year<2000 || year>2012)
        	System.out.println("Die Bestimmung erfolgt nur für Jahre zwischen 2000 und 2012!");
        else
        	System.out.println("Im Jahr " + year + " fiel(en) " + days[year-2000] + " Sonntag(e) auf den ersten eines Monats!");
	}
}
Mit genügend Fleiss, könnte man das auf die gesamte menliche Zeitreichnung ausweiten ;-)
 

Purgator

Aktives Mitglied
Ich glaube ja garnicht das man Schaltjahre berücksichtigen soll.
So wie ich die Aufgabenstellung verstanden hätte, bekommt man nur einen Tag und kein Jahr als Eingabe geliefert, d.h. egal mit welchen Mitteln man arbeitet, es ist unmöglich Schaltjahre zu berücksichtigen.
Da das Thema Verzweigungen und Schleifen heißt wird es wohl auf so etwas hinauslaufen (halber Pseudocode):
Java:
Eingabe: int start //letzter Tag des Vorjahres, von 0-6 (Montag - Sonntag)
//Array welches die Monatslaengen beinhaltet, zuerst 1 Tag, weil es nur ein Tag vom letzten des jahres bis zum ersten des nächsten ist
int[] monatslaenge = {1, 31, 28, 31,..., 30};
int tag = start;
//Monate überprüfen
for(int i=0; i<monatslaenge;i++) {
  tag = (tag + monatslaenge[i]) % 7;
  //prüfen ob der 1. ein Sonntag ist - wenn ja Ausgabe
  if(tag == 6) {
     syso("1."+(i+1)+". ist ein Sonntag");
  }
}
Ich habe wieder nicht berücksichtigt, dass ein "Zahlensystem" benutzt werden soll, wo bei 1. angefangen wird zu zählen. Wenn das unbedingt erforderlich ist müssen natürlich anpassungen vorgenommen werden.
Ansonsten habe ich das nicht getestet, müsste aber denke ich grob funktionieren.
 
H

hLsyAsd78A

Gast
Ich glaub ich hab das mal in einem Übungsbuch machen wüssen wie ich Programmieren gelernt habe...
Es geht glaub ich nur um ein Jahr (z.B. 2009) und das ohne eingabefelder! Aber ich weiß nicht mehr wie ich da angefangen habe!
 

nrg

Top Contributor
@nrg: Hab nicht mehr reingeguckt, daher hab ich das nicht beachtet.

Letzendlich aber unmöglich ohne Kalender wenn man auch Jahre betrachtet in der Zeit in der alle möglichen Änderungen durchgeführt wurden. Tage weglassen, Monate etc.

was ist daran unmöglich ???:L

das ist ein boolean mit 3 Modulos und du weisst, ob es ein Schaltjahr ist oder nicht...

edit: vorausgesetzt man hat natürlich das Jahr ;). das ging ja aus der Aufgabenstellen (hatte ich ja im Vorpost schon geschrieben) nicht unbedingt hervor
 
Zuletzt bearbeitet:

mariusbopp

Bekanntes Mitglied
Ich glaube ja garnicht das man Schaltjahre berücksichtigen soll.
So wie ich die Aufgabenstellung verstanden hätte, bekommt man nur einen Tag und kein Jahr als Eingabe geliefert, d.h. egal mit welchen Mitteln man arbeitet, es ist unmöglich Schaltjahre zu berücksichtigen.
Da das Thema Verzweigungen und Schleifen heißt wird es wohl auf so etwas hinauslaufen

ja aber wie willst du es dann rechnen du musst doch wissen wieviel tage im monat sind oder irre ich mich??
das ganze vill mit einer "switch" anweisung oder is das wieder zu umständlich??
und schaltjahre könnte man vereinfacht z.b so rechnen das alle jahre die durch 4 teilbar sind schaltjahre sind! wobei dann jahre wie 1700 und 1800 oder 2000(was ein schaltjahr war) nicht als solche erkannt werden also müsste man dann die jahre durch 400 teile und wenn diese ohne rest bleiben = schalt jahr:rtfm:

naja soviel dazu... obs weiter hilft???:L#

das thema ist ja schleifen verzweigung...aber es hat noch niemand wirklich was dazu gesagt sondern nur auf die aufgabe bezogen....
also:
bsp. für eine while schleife:
Java:
int zaehler = 0;
while(zaehler<10){
System.out.println(zaehler);
zaehler++;
}
verzweigungen via if anweisungen...
Java:
if (x>=0)
a=x;
else
a=-x;

ich hoffe das passt hier rein!!!:oops:

lg
 
Zuletzt bearbeitet:

nrg

Top Contributor
und schaltjahre könnte man vereinfacht z.b so rechnen das alle jahre die durch 4 teilbar sind schaltjahre sind! wobei dann jahre wie 1700 und 1800 oder 2000(was ein schaltjahr war) nicht als solche erkannt werden also müsste man dann die jahre durch 400 teile und wenn diese ohne rest bleiben = schalt jahr:rtfm:

naja nicht ganz. ist ein Jahr durch 400 teilbar, ist es immer ein Schaltjahr. ist ein Jahr durch 4 aber nicht durch 100 teilbar ist es ebenfalls eins. alle anderen Fälle -> kein Schaltjahr
 
J

java2978

Gast
Ich weiß von wo die Übung stammt: "Programmierung - Grundlagen, Neubearbeitung 2009, der Verlag heißst HERDT" ich hab das Buch selbst finde aber leider die Lösungen nicht mehr! Hat keiner von euch die Lösungen für das Buch?
 

Synethic

Mitglied
was haltet ihr davon?
Java:
class sonntag {

  public static void main(String[] args)
  {
    
    int letzterTag = 3; 
    int tag = 1; 
    int monat = 1;  
    int monatstage = 1;
    int schaltjahr = 0; 
    
    System.out.println("Monate, beginnend mit einem Sonntag:");
    
    for (monat = 1; monat <= 12; monat++) 
    {
      switch(monat) 
      {
        case 2: monatstage = 28+schaltjahr; break;
        case 4: case 6: case 9: case 11: monatstage = 30; break;
        default: monatstage = 31;
      }
      for (tag = 1; tag <= monatstage; tag++) 
      {
        letzterTag = letzterTag%7 +1;
        if (tag == 1 && letzterTag == 7) 
        System.out.println("Sonntag der " + tag + ". " + monat + ".");
      }
    }
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Code nach Schleifen und Verzweigungen durchsuchen Allgemeine Java-Themen 6
K Eclipse Alternativkonstrukte (Verzweigungen: if, switch,else..) Allgemeine Java-Themen 4
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 2
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 1
A Mehrere for-Schleifen Allgemeine Java-Themen 2
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
Junger_Basileus Attribute, Arrays, Schleifen Allgemeine Java-Themen 9
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
C Schachbrett mit while-schleifen Allgemeine Java-Themen 7
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
R kann man irgendwie mit Arrays mit Eingabefenstern und Schleifen Werte abklappern? Allgemeine Java-Themen 2
R n verschachtelte Schleifen? Allgemeine Java-Themen 14
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
R Schleifen Allgemeine Java-Themen 11
L for-Schleifen Zählfehler Allgemeine Java-Themen 6
B BigDecimal Schleifen Allgemeine Java-Themen 9
prakdi Zeit zum Durchlauf der Schleifen unverständlich!? Allgemeine Java-Themen 3
B Auslagerung von verschachtelten Schleifen Allgemeine Java-Themen 11
T Verschachtelte Schleifen abbrechen Allgemeine Java-Themen 3
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
S Verschachtelte Schleifen Allgemeine Java-Themen 9
Z GC -> Allokation in Schleifen Allgemeine Java-Themen 25
A Fibonacci-Zahlen & kopfgesteuerte Schleifen & Strukt Allgemeine Java-Themen 8
V Vererbung und Schleifen Allgemeine Java-Themen 5
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S schleifen Allgemeine Java-Themen 3
A Schleifen in Ant? Allgemeine Java-Themen 5
G Methode mit Schleifen NullPointerException Allgemeine Java-Themen 2
L Schleife über Schleifen Allgemeine Java-Themen 4
M Verschachtelte Schleifen (unbekannte Tiefe) Allgemeine Java-Themen 3
N Code verkürzen(mit schleifen)? Allgemeine Java-Themen 10
C Effektivitaet bei for Schleifen Allgemeine Java-Themen 18
C Performance von FOR Schleifen Allgemeine Java-Themen 25
R Lohnt sich byte und short bei Schleifen? Allgemeine Java-Themen 9
P Schleifen liefern Werte nicht wie erwartet Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben