Logischer Fehler im Code

Status
Nicht offen für weitere Antworten.

Angelika_25

Bekanntes Mitglied
Hallo, ich habe folgenden Code, der auch meistens funktioniert, aber nicht immer.
Code:
import static Prog1Tools.IOTools.*;
public class Aufgabe5_14 {
	public static void main (String[] args) {
		int t=readInteger("Bitte geben Sie einen Tag ein: ");
		int m=readInteger("Bitte geben Sie einen Monat ein: ");
		int j=readInteger("Bitte geben Sie ein Jahr ein: ");
		int c;
		int y;
		int h;
		String wochentag="";
		
		
		if (m<=2) {
			m=m+10;
			j=j-1;
		}
		else
		{
			m=m-2;
		}
		
		c=j/100;
		y=j%100;
		
		h=(((26*m-2)/10)+t+y+y/4+c/4-2*c)%7;
		
		if (h<0) {
			h=h+7;
		}
		
		
		switch (h) {
		case 0: wochentag="Sonntag"; break;
		case 1: wochentag="Montag"; break;
		case 2: wochentag="Dienstag"; break;
		case 3: wochentag="Mittwoch"; break;
		case 4: wochentag="Donnerstag"; break;
		case 5: wochentag="Freitag"; break;
		case 6: wochentag="Samstag"; break;
		
		}
		
		System.out.println("Der "+t+"."+m+"."+j+" ist ein "+wochentag+".");
		
		
	}

}
Bei der Ausgabe wird manchmal von m zwei abgezogen und somit falsch angezeigt. Ich weiß aber nicht woran das liegt, vor allem weil es ja manchmal funktioniert.

Würde mich freuen wenn mir jemand helfen könnte.

Liebe Grüße

Hab es mit 24.12.2001 ausprobiert, angezeigt wird 24.10.2001
 
Also wenn ich das mit m=12 durchspiele, komme ich im if auf "false" und somit zu m=m-2
 
Ja das weiß ich und ich hab auch diesen Lösungscode:
Code:
import Prog1Tools.IOTools;

public class Wochentag {

  public static void main (String[] args) {

    int t, m, j, c, y, h;

    t = IOTools.readInteger ("Tag = "  );
    m = IOTools.readInteger ("Monat = ");
    j = IOTools.readInteger ("Jahr = " );

    System.out.print("Der " + t + "." + m + "." + j + " ist ein ");

    if (m <= 2)
    {
      m = m + 10;
      j = j - 1;
    }
    else
      m = m - 2;
    c = j/100;
    y = j%100;
    h = (((26*m - 2)/10) + t + y + y/4 + c/4 - 2*c) % 7;
    if (h < 0)
      h = h + 7;

    if (h == 0)
      System.out.println("Sonntag.");
    else if (h == 1)
      System.out.println("Montag.");
    else if (h == 2)
      System.out.println("Dienstag.");
    else if (h == 3)
      System.out.println("Mittwoch.");
    else if (h == 4)
      System.out.println("Donnerstag.");
    else if (h == 5)
      System.out.println("Freitag.");
    else
      System.out.println("Samstag.");
  }

}
Das ist doch fast der gleiche Code, warum funktioniert aber dieser?
 
Weil der Ausgabe ihr erster Teil weiter oben steht 😛 Auch hier ist m später m-2, welches in der späteren (mir gerade aus Interesse- und Zeitgründen nicht auf Korrektheit überprüfbare) Berechnung verwendet werden muss.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben