Schaltjahrberechnung

Neue Frage »

Auf diesen Beitrag antworten »
InformatikJava12 Schaltjahrberechnung

Ich hätte eine kleine Frage. Wie kann ich im Java Programm realisieren, dass eine Jahreseingabe ein Schaltjahr ist oder nicht ohne die Modulooperation zu verwenden.

Die Bedingung weis ich: Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist aber nicht durch 100, es sei denn es ist zusätzlich durch 400 teilbar.
Also ich skizziere meine Idee;
Also sei z die eingegebene Jahreszahl. Dann soll das Programm prüfen, ob rest = z- z*4 = 0 unnd rest = z-z*100 ungleich 0. Wie kann ich das in Java am besten realisieren? Mit if und else wsl aber dann wie genau.
Mit der Java Bibliothek kann ich auch nicht arbeiten.
 
Auf diesen Beitrag antworten »
Karlito

Hallo InformatikJava12,

code:
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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
public class Test {
	public static void main(String[] args) { 
		int jahr = 2016;

		mitDivision(jahr);
		ohneDivision(jahr);

	}

	public static void mitDivision(int jahr)
	{
		boolean istSchaltJahr = true;

		// durch vier teilbar?
		if ((jahr / 4)*4==jahr)
		{
			System.out.println("Mit Division: Jahreszahl ist durch 4 Teilbar");
		}
		else
		{
			System.out.println("Mit Division: Jahreszahl ist nicht durch 4 Teilbar");
			istSchaltJahr = false;
		}

		// durch 100 teilbar?
		if ((jahr / 100)*100==jahr)
		{
			System.out.println("Mit Division: Jahreszahl ist durch 100 Teilbar");
			istSchaltJahr = false;
		}

		// durch 400 teilbar?
		if ((jahr / 400)*400==jahr)
		{
			System.out.println("Mit Division: Jahreszahl ist durch 400 Teilbar");
			istSchaltJahr = true;
		}

		if (istSchaltJahr)
		{
			System.out.println("Mit Division: Das Jahr " + jahr + " ist ein Schaltjahr");
		}
		else
		{
			System.out.println("Mit Division: Das Jahr " + jahr + " ist kein Schaltjahr");
		}
	}

	public static void ohneDivision(int jahr)
	{
		int tmp = jahr;
		boolean istSchaltJahr = true;

		// durch 4 teilbar?
		while (tmp - 4 >= 0)
		{
			tmp = tmp - 4;
		}

		if (tmp==0)
		{
			System.out.println("Ohne Division: Jahreszahl ist durch 4 Teilbar");
			istSchaltJahr = true;
		}
		else
		{
			System.out.println("Ohne Division: Jahreszahl ist nicht durch 4 Teilbar");
		}

		//durch 100 teilbar?
		tmp = jahr;
		while (tmp - 100 >= 0)
		{
			tmp = tmp - 100;
		}

		if (tmp==0)
		{
			System.out.println("Ohne Division: Jahreszahl ist durch 100 Teilbar");
			istSchaltJahr = false;
		}

		//durch 400 teilbar?
		tmp = jahr;
		while (tmp - 400 >= 0)
		{
			tmp = tmp - 400;
		}

		if (tmp==0)
		{
			System.out.println("Ohne Division: Jahreszahl ist durch 400 Teilbar");
			istSchaltJahr = true;
		}

		if (istSchaltJahr)
		{
			System.out.println("Ohne Division: Das Jahr " + jahr + " ist ein Schaltjahr");
		}
		else
		{
			System.out.println("Ohne Division: Das Jahr " + jahr + " ist kein Schaltjahr");
		}
	}
}


Besten Gruß,

Karlito
Auf diesen Beitrag antworten »
InformatikJava12

Wow. Gleich der ganze Codesmile

Vielen lieben Dank. smile Daumen hoch Daumen hoch Daumen hoch Daumen hoch Daumen hoch Wink Wink smile smile smile smile
Auf diesen Beitrag antworten »
Karlito

Gewöhn dich nicht dran, war nur faul.

Gruß,

Karlito
 
Auf diesen Beitrag antworten »
InformatikJava12

Ja klarsmile

Wenn ich mit der Klasse Scanner arbeite. Warum funktioniert das dann nicht. Schau mal hier:

code:
1:
2:
3:
4:
5:
6:
7:
import java.util.Scanner;
 public class Test{ 
public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 int jahr= scanner.nextInt(); 
mitDivision(jahr); 
ohneDivision(jahr); }
Auf diesen Beitrag antworten »
Karlito

Was kommt denn für eine Fehlermeldung?

Gruß,

Karlito
Auf diesen Beitrag antworten »
InformatikJava12

In der 4. Zeile bei scanner folgendes:

Ressource leak:"scanner" is never closed

Wie behebe ich das? verwirrt
Auf diesen Beitrag antworten »
Karlito

Das ist glaube nur eine Warnung.

Ansonsten sollte das hier helfen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
	public static void main(String[] args) { 

		Scanner scanner = new Scanner(System.in);
		int jahr= scanner.nextInt(); 
		scanner.close();
		mitDivision(jahr); 
		ohneDivision(jahr);
	}



Gruß,

Karlito
Auf diesen Beitrag antworten »
as_string

Ich würde hier wärmstens "try-with-resources" (seit Java 7 glaub ich) empfehlen. Das sähe dann etwa so aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
int jahr;
try(Scanner scanner = new Scanner(System.in)) {
    jahr= scanner.nextInt();
}
catch(FileNotFoundException e) { ... }

...


Gruß
Marco
Auf diesen Beitrag antworten »
InformatikJava12

Sowas hatten wir noch gar nicht. Kann ich auch Buffered reader verwenden, um das zu entgehen?
Wie kommt dieser Fehler zustande?
Auf diesen Beitrag antworten »
Karlito

Der Fehler kommt zustande, weil Du scanner öffnest (wahrshceinlich schon mit new Scanner(...)), aber nicht schließt. Du musst also, nachdem du den int gelesen hast, scanner.close(); aufrufen.
Davon abgesehen ist es immernoch kein Fehler. Dein Code compiliert bei mir. Es ist nur ein Hinweis.

Gruß,

Karlito
Auf diesen Beitrag antworten »
InformatikJava12

Dankesmile Es hat geklappt Daumen hoch smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »