Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Algorithmen (http://www.informatikerboard.de/board/board.php?boardid=17)
----- Schaltjahrberechnung (http://www.informatikerboard.de/board/thread.php?threadid=3750)


Geschrieben von InformatikJava12 am 30.10.2017 um 17:28:

  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.



Geschrieben von Karlito am 01.11.2017 um 10:51:

 

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



Geschrieben von InformatikJava12 am 01.11.2017 um 15:32:

 

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



Geschrieben von Karlito am 01.11.2017 um 17:04:

 

Gewöhn dich nicht dran, war nur faul.

Gruß,

Karlito



Geschrieben von InformatikJava12 am 02.11.2017 um 15:38:

 

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); }



Geschrieben von Karlito am 03.11.2017 um 07:09:

 

Was kommt denn für eine Fehlermeldung?

Gruß,

Karlito



Geschrieben von InformatikJava12 am 03.11.2017 um 07:59:

 

In der 4. Zeile bei scanner folgendes:

Ressource leak:"scanner" is never closed

Wie behebe ich das? verwirrt



Geschrieben von Karlito am 03.11.2017 um 10:17:

 

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



Geschrieben von as_string am 03.11.2017 um 11:02:

 

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



Geschrieben von InformatikJava12 am 03.11.2017 um 12:03:

 

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



Geschrieben von Karlito am 03.11.2017 um 12:53:

 

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



Geschrieben von InformatikJava12 am 04.11.2017 um 09:51:

 

Dankesmile Es hat geklappt Daumen hoch smile


Forensoftware: Burning Board, entwickelt von WoltLab GmbH