Schleifenberechnung

Michi_1989

Mitglied
Guten Tag,

ich studiere Wirtschaftsinformatik im 1. Semester und soll in der Übung ein Studentenverwaltungsprogramm mit Java schreiben.

Nun kann ich die Berechnung des jüngsten, ältesten und das Durchschnittsalter nicht richtig ausgeben, da sie innerhalb der for-Schleife berechntet werden müssen, da sonst der Zugriff auf das Array nicht gegeben ist. Es soll nur einmal ausgeben werden. Hatte es schon mit einer switch-case versucht, aber dann nimmt er immer die werte es letzten arrays. Habe die Println-Anweisung einmal unterstrichen, damit ihr wisst wo das Problem ist.
Ich bin schon fast am verzweifeln, habe schon etliche Stunden versucht, die Lösung zu finden, aber komme einfach nicht weiter und kann mich somit nicht den anderen Modifizierungen des Programms widmen.
Am besten wäre es, wenn es ohne eine eigene Methode funktioniert, da Methoden erst in der nächsten Übung verlangt werden.

Vielen Dank im Voraus
MFG

Michael

Java:
public class Uebung5 {

	enum Studiengang {WINF, INF, MINF, MT, GET};

	public static void main(String[] args) {

		Studiengang a = Studiengang.WINF;
		Studiengang b = Studiengang.INF;
		Studiengang c = Studiengang.MINF;
		Studiengang d = Studiengang.MT;
		Studiengang e = Studiengang.GET;

		// 50 Studs,0=MatrNr: , 1=Gebjahr: ,2=GebMon: ,3=Gebtag: , 4=Fachbereich: ,5=Alter:
		int [][]stud = new int  [50][6];
		//Zufallswerte zuordnen, Schleife über 50 Studs

		System.out.println("Index"+ "\tMatr"+ "\tJahr    Monat"+ "\tTag    FB"+ "\tAlter");
		for (int index=0;index <50;++index) {
			stud[index][0] = (int) (10000+9583*Math.random()); //5-stellige  Zahlen
			stud[index][1] = (int) (1980+10*Math.random()); // geb. ab 1980
			stud[index][2] = (int) (1+100*Math.random()%12); //Werte 1...12
			stud[index][3] = (int) (1+100*Math.random()%30); // Werte 1..30

			if((int) (10*Math.random()) >=5) stud[index][4] = 2; // Werte 1 oder 2
			else stud[index][4] = 1;

			switch((int) (10*Math.random())%5){
				case 0: System.out.println(a);
				break;
				case 1: System.out.println(b);
				break;
				case 2: System.out.println(c);
				break;
				case 3: System.out.println(d);
				break;
				case 4: System.out.println(e);
			}


			stud[index][5] = (int) ((2011*365+11*30+07)-(stud[index][1]*365+stud[index][2]*30+stud[index][3]))/365; // Alter mit Array berechen


		System.out.println(index
			+": \t"+stud[index][0]
			+"\t"+stud[index][1]
			+"\t"+stud[index][2]
			+"\t"+stud[index][3]
			+"\t"+stud[index][4]
			+"\t"+stud[index][5]
			);


	 	int	max=0, min=0, sum=0;
		for (int i=1;i<=50;++i) {   // Schleife für min,max und sum
				int n=stud[index][5];
				++sum;
				if (i==1) {
					max=n;
					min=n;
				}
				if (n>max) max=n;
				if (n<min) min=n;

		}

			[U][B]switch (index){
			case 49: System.out.println("Aeltester: "+max +"\tJuengster: "+min +"\tDurchschnittsalter: "+sum/50);[/B][/U]
			}
		}

	}


}
 
Zuletzt bearbeitet von einem Moderator:

langhaar!

Bekanntes Mitglied
Deine Programmstruktur scheint grundlegend falsch zu sein. Wozu brauchst du eine weitere Schleife um min,max und Sum zu berechnen? Dies kann alles in einer Schleife erfolgen.

Java:
  for (int i=1;i<=50;++i) {   // Schleife für min,max und sum
                int n=stud[index][5];
                ++sum;
                if (i==1) {
                    max=n;
                    min=n;
                }
                if (n>max) max=n;
                if (n<min) min=n;
 
        }

Deine innere Schleife iteriert über die Variable i, greift aber auf den Ausdruck int n=stud[index][5]; zu.
Du prüfst 50 Mal den gleichen Wert.
 

Andi_CH

Top Contributor
Der Zugriff auf den Array ist immer gegeben! Ich sehe dein Problem nicht so richtig und du offensichtlich auh ncht.

Um das zu ändern nimmst du (wie oft habe ich das wohl schon gepredigt?) Papier und Stift und notierst Schritt für Schritt was du tust um zum gewünschten Resultat zu kommen.
Danach schaltest du den PC ein und tippst genau das was du notiert hast in Java ein und siehe da: Es wird gehen.

Das könnte ungefähr so aussehen - muss aber noch detaillerter ausgearbeitet werden.

1. Studentenarray erstellen
2. für jeden Studenten wiederholen
2a. Durchschnittswerte nachführen
3. Durchschnittswerte ausgeben

Vielleicht merkst du dann plötzlich dass du die Durchschnittswerte nicht ausgeben kannst, weil die ausserhalb der Schleife nicht bekannt sind?

Na deklariert und initialisiert müssen die schon ausserhalb der schleife werden.

Einfach so ein bisschen mit if, switch und ähnlichem rumbasteln wird dich kaum jemals zu einer vernünftigen Lösng bringen.
 
Zuletzt bearbeitet:

Michi_1989

Mitglied
Hi,

danke euch beiden. Ich weiß auch nicht wie ich darauf gekommen bin so eine Schleifenkonstellation zu erstellen. Ich schätze mal, ich hatte ohne groß nachzudenken die Berechnung aus der 1 Übung in die 5 übernommen. Gut es funktioniert jetzt. Habe min,max, sum und i noch vor der schleife deklariert und initialisiert. Außerdem habe ich das ++sum durch sum=sum+n ersetzt und danach außerhalb der schleife die print-Anweisung gesetzt.

Zu der Sache mit dem aufschreiben... Das hat mir mein Übungsprof. auch gestern gesagt, da ich noch statisch und nicht dynamisch an das Programmieren ran gehe. Heute habe ich noch viele andere Sachen zu tun, aber für die nächste Übung muss ich das wohl oder übel machen. Okay nochmal danke und einen schönen Tag noch!

MFG
Michael
 

Neue Themen


Oben