Arrays

123michi19

Lt. Junior Grade
Registriert
Okt. 2014
Beiträge
321
Hey Leute,

ich habe vor Kurzem mit dem Thema Arrays angefangen und hänge jetzt an einer Stelle fest. Ich hoffe, Ihr könnt mir weiterhelfen.
Geschrieben werden soll mit Hilfe von Arrays ein Programm, dass für einen vorgegebenen Tag und vorgegebenen Monat die Kalenderwoche ausgibt.

Natürlich habe ich schon einmal angefangen mit der Deklaration der Arrays (Kann man das so überhaupt sagen, dass man Arrays deklariert?)

Hier der Code:

Code:
/*Kalenderwoche2*/
public class Kalenderwoche2
{
	public static void main (String[]args)
	{
		
		int Monat [] = {31,28,31,30,31,30,31,31,30,31,30,31};
		int sum = 0;
		for (int i=0; i<Monat.length;i++)
		{
		sum = sum+Monat[i];
		}
		int ergebnis = sum/7;
		System.out.println ("Das eingegebene Datum befindet sich in KW " + ergebnis);
		
	}
}

Momentan bekomme ich als Ausgabe noch KW 52, da einfach alle Tage aufsummiert werden und dann durch 7 geteilt werden. Mein Problem liegt jetzt darin, dass ich nicht weiß, wie ich den Tag und den Monat in das Programm einbinden kann?


Vielen Dank für Eure Hilfe.
 
Du kannst z.B. das args[] Array benutzen. Dort befinden sich die Kommandozeilenparameter drin.
Oder du fragst in deinem Programm per Benutzerabfrage den Monat und Tag ab. Du hast doch bestimmt schon gelernt, wie man Benutzereingaben abfragt und in eine Variable abspeichert.
 
Mir ist die Eingabemöglichkeit mit

import java.util.Scanner;
Scanner read = new Scann (System.in);
read.nextInt();

bekannt. Wäre das eine Möglichkeit?
 
Die Kalenderwoche zu bestimmen, ist gar nicht so trivial, da es da verschiedene Verfahren gibt (erster Tag im Jahr, erste 5 Tage Woche, erste vollständige Woche) und im Februar ein Schalttag existiert.

P.S. Das Array wird deklariert, richtig, aber dann wird es mit Werten initialisiert.
 
Mit Java.Util.Scanner sollte das genau so funktionieren wie du vorgeschlagen hast. Damit ließt du dann Monat und Tag als int ein und dann berechnest du damit die Kalenderwoche. Wie andy bereits sagte ist das nicht so trivial das 100% korrekt zu machen.
 
Es darf einfacher Weise angenommen werden, dass es sich um kein Schaltjahr handelt :-)
Ergänzung ()

Vielen Dank für Eure Antworten, ich werde das morgen gleich einmal ausprobieren :-)
 
Hey Leute,

noch einmal vielen Dank für die Hilfe vom letzten Mal.

Jetzt hätte ich noch eine Zusatzfrage (auch zum Thema Arrays, allerdings in der Kategorie mehrdimensionale Arrays)

Erst einmal der Code von mir:

Code:
/*Pascal*/ 
public class Pascal
{
public static void main (String[]args)
	{
		
		int [][] pascal = { {1},{1,1},{1,2,1} };
		
		System.out.println (pascal [0][0]);
		System.out.println (pascal [1][1]);
		System.out.println (pascal [2][0]);	
		
	}
}

Hier bekomme ich jetzt als Ausgabe 1,1,1 -> untereinander geschrieben. Angenommen ich möchte jetzt, dass in der 1. Zeile die 1 steht, in der zweiten allerdings 1,1 und in der dritten Zeile 1,2,1 (also genauso wie oben initialisiert).

Lässt sich das Problem mit der Ausgabe beheben (oder wäre es eine Möglichkeit mit einer for-Schleife zu arbeiten?)


Besten Dank für Eure Hilfe :-)
 
Ich weiß nicht ob ich dich verstehe. Du möchtest das 1; 1,1 und 1,2,1 jeweils nur ein Array-Element sind d.h. dein Array hätte nur eine Dimension mit drei Einträgen? Möchtest du das, darfst du dein Array nicht Mehrdimensional anlegen, 1,1 kann man aber nicht in ein Integer-Feld speichern, da müsstest du schon ein Float erzeugen (und dann vermutlich 1.1 schreiben). Liegt dein Problem nur in der Ausgabe, so mache zwei Schleifen.

Pseudo-Code:
for (int i=0; i<Array.Length;i++)
{
for (int j=0; i<Array.Length;j++)
System.out.println (Array[j]);
}

Möchtest du die jeweilige j-Dimension in einer Zeile ausgeben, musst du Array[j] z.B. zuerst auf ein string schreiben (mystring = mystring + "," + Array[j].ToString(); ) und den String dann ausgeben.
 
Zuletzt bearbeitet:
Vielen Dank für deine Antwort. Das Problem liegt nur in der Ausgabe und konnte ich soeben lösen :p
 
Zurück
Oben