Variablen Array dynamisch halten und ausrechnen

chk1102

Aktives Mitglied
Hallo Zusammen,


ich habe mich an eine Übung gemacht, die BMI ausrechnet.
Der "Klu" dabei ist, das Array dynamisch zu halten und es soll auf jedenfall ein normales Array bleiben.

Das Ausrechnen des BMIs funktioniert, ebenso die Ausgabe.
Berechnung des Durchschnitts aller eingegebenen Werte sowie wie viele Werte ober- und unterhalb des Durchschnitts liegen nicht.

Anbei der Code:
Java:
public class P03_2_nochmalsBMI {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// ein Paar Variablen
		int bmi = 0;
		int summe= 0;
		int durch= 0;
		// Abfrage wie viele Benutzer gefragt werden sollen
		System.out.println("Wie viele BMI sollen berechnet werden?");
		int anzahl = EAM.rInt();

		//mit der Variablen Anzahl will ich das Array anz dynamisch halten
		int anz [] = new int [anzahl];
		
		//solange i kleiner als die Anzahl ist, soll gefragt werden: KG und Größe
		for (int i = 0; i < anzahl; i++) {
			System.out
					.println("BItte geben Sie an ob sie weiblich = 1 oder männlich = 2 sind oder 0 wenn sie aufhören wollen");
			int geschlecht = EAM.rInt();

			//Geschlecht 1 steht für weiblich und 2 für männlich
			if (geschlecht == 1 || geschlecht == 2) {
				System.out
						.println("Nachfolgend bitte Gewicht in KG und Größe in cm");
				int gewicht = EAM.rInt();
				int groesse = EAM.rInt();
				System.out.println("Danke.");
				bmi = gewicht * 10000 / (groesse * groesse);
				
				System.out.println(bmi);
				if (geschlecht == 1) {
					if (bmi < 19) {
						System.out.println("Sie haben untergewicht");
					}
					if (bmi < 29 && bmi >= 19) {
						System.out.println("Normalgewicht");
					} else if (bmi >= 29 && bmi < 30)
						System.out.println("Übergewicht");
					if (bmi >= 30) {
						System.out.println("behandlungsbedürftig");
					}
				}
				if (geschlecht == 2) {
					if (bmi < 20) {
						System.out.println("Sie haben untergewicht");
					}
					if (bmi < 28 && bmi >= 20) {
						System.out.println("Normalgewicht");
					} else if (bmi >= 280 && bmi < 30)
						System.out.println("Übergewicht");
					if (bmi >= 30) {
						System.out.println("behandlungsbedürftig");
					}
				}

			} else if (geschlecht == 0)
				System.out.println("Programmende");

		}
		//Hier soll das Array ausgegeben werden: 1. als durchschnitt in der
		// Variablen durch und dann noch Anzahl der Werte die Ober- und
		// unterhalb des Durchschnitts liegen
		for (int y = 0; y<anz.length; y++) {
			System.out.println("Angegebene Anzahl: " + anz.length);
			anz[y] = bmi;
			summe += anz[y];
			System.out.println("Summe:" + summe);
			durch = summe/anz.length;
			System.out.println("Der Durchschnitt beträgt : " + durch);
		}
		
	}
}


Ich hoffe mir kann jemand helfen.
Danke schon mal🙂
 
der "Klu" ist böser Schrift-Anschlag, der "Clou"?

den Clou hast du allerdings vergessen,
nur mit 'Array dynamisch zu halten' soll man jetzt wissen was in deinem funktionierenden Programm anders werden soll?

du fragst doch schon nach der Anzahl, das Array wird passend groß,
wenn noch größer, dann kannst du entweder ein neues erstellen und umkopieren oder der Einfachheit halber gleich am Anfang eine Million verwenden,
soviel wird wohl nicht eingegeben, dafür braucht es aber gleich paar MB Speicher..

wenn Felder frei bleiben, dann müsstest du natürlich bisschen umstellen von array.length auf anzahl
 
Hoppla.. Clou 😳

Ja das stimmt ich frage bereits nach der Anzahl.
Ich möchte aber wissen, wie der Durchschnitt der berechneten Arrays ist sowie wie viele BMIs unter und oberhalb des Durchschnitts liegen

Ich habe bisher nicht verstanden, wie ich mit Arrays rechnen kann.
 
funktioniert die Durchschnittsrechnung nicht?
wenn der Durchschnitt erstmal da ist, dann ein zweites Mal durch die Liste,
z.B. mit if Zahlen und Durchschnitt vergleichen und bestimmte Zähler erhöhen
 
du brauchst einfach 2 schleifen:
eine die über das array geht und alles zusammenadiert und durch die anzahl teilt => durchschnitt
dann nochmal rüber schleifen und jeden wert angucken, ob er unter oder über dem durchschnitt liegt. beides mitzählen, fertig
 
falls du meinst: 'für jede Teilaufgabe, etwa Durchschnitt, Ober, .. eine Schleife'
dann nein, nicht unbedingt, hier nur mehrere Schleifen weil ohne Durchschnitt der Rest nicht anzufangen ist

generell kann man schon eher sagen, dass man ohne Schleife, ob direkt oder durch Rekursion, mit einem Array nicht viel anfangen kann
 
Mich hat das auch mal interessiert, deshalb hab ich das mal "nachprogrammiert":

Java:
        Scanner scanner = new Scanner(System.in);
        System.out.print("Wie viele Personen: ");
        int[][] geschlechtGewichtGroesseBMIKategorie = new int[scanner.nextInt()][5];
        for (int i = 0; i < geschlechtGewichtGroesseBMIKategorie.length; i++) {
            System.out.print(i + 1 + ". Person, Geschlecht (w=0, m=1): ");
            geschlechtGewichtGroesseBMIKategorie[i][0] = scanner.nextInt();
            System.out.print(i + 1 + ". Person, Gewicht: ");
            geschlechtGewichtGroesseBMIKategorie[i][1] = scanner.nextInt();
            System.out.print(i + 1 + ". Person, Groesse: ");
            geschlechtGewichtGroesseBMIKategorie[i][2] = scanner.nextInt();
            geschlechtGewichtGroesseBMIKategorie[i][3] =
                    geschlechtGewichtGroesseBMIKategorie[i][1]
                    * 10000
                    / (geschlechtGewichtGroesseBMIKategorie[i][2]
                    * geschlechtGewichtGroesseBMIKategorie[i][2]);
            System.out.println("BMI = " + geschlechtGewichtGroesseBMIKategorie[i][3]);
            if (geschlechtGewichtGroesseBMIKategorie[i][0] == 0) { // weiblich
                if (geschlechtGewichtGroesseBMIKategorie[i][3] < 19) {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 0;
                    System.out.println("untergewichtig");
                } else if (geschlechtGewichtGroesseBMIKategorie[i][3] < 29) {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 1;
                    System.out.println("normalgewichtig");
                } else if (geschlechtGewichtGroesseBMIKategorie[i][3] < 30) {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 2;
                    System.out.println("uebergewichtig");
                } else {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 3;
                    System.out.println("behandlungsbeduerftig");
                }
            } else if (geschlechtGewichtGroesseBMIKategorie[i][0] == 1) { // maennlich
                if (geschlechtGewichtGroesseBMIKategorie[i][3] < 20) {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 0;
                    System.out.println("untergewichtig");
                } else if (geschlechtGewichtGroesseBMIKategorie[i][3] < 28) {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 1;
                    System.out.println("normalgewichtig");
                } else if (geschlechtGewichtGroesseBMIKategorie[i][3] < 30) {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 2;
                    System.out.println("uebergewichtig");
                } else {
                    geschlechtGewichtGroesseBMIKategorie[i][4] = 3;
                    System.out.println("behandlungsbeduerftig");
                }
            } else {
                System.out.println("Ungueltiges Geschlecht");
                i--;
            }
        }

        double BMIDurchschnitt = 0, kategorieDurchschnitt = 0;
        for (int i = 0; i < geschlechtGewichtGroesseBMIKategorie.length; i++) {
            BMIDurchschnitt += geschlechtGewichtGroesseBMIKategorie[i][3];
            kategorieDurchschnitt += geschlechtGewichtGroesseBMIKategorie[i][4];
        }
        BMIDurchschnitt /= geschlechtGewichtGroesseBMIKategorie.length;
        kategorieDurchschnitt /= geschlechtGewichtGroesseBMIKategorie.length;
        System.out.println("BMIDurchschnitt = " + BMIDurchschnitt);
        System.out.println("KategorieDurchschnitt = " + kategorieDurchschnitt);

        for (int[] a : geschlechtGewichtGroesseBMIKategorie) {
            System.out.println(Arrays.toString(a));
        }

Ab Zeile 4 werden die Personen eingelesen, ab Zeile 11 wird der BMI berechnet sowie die Kategorie, ab Zeile 51 wird der Durchschnitt berechnet und ab Zeile 61 wird das gesamte Array nochmal ausgegeben (alle Daten)

Man soll aber niemanden in Schubladen stecken 😉

(< 19, < 29, < 30 sowie >= 30 bei Frauen und < 20, < 28, < 30 sowie >= 30 bei Männern habe ich jetzt so übernommen)
 
> Man soll aber niemanden in Schubladen stecken

Kalauder:
bei dem Body-Index passen die auch gar nicht rein!
 
Aaaaa, die Namen/Bezeichner sind zu lang... ?

Java:
        Scanner s = new Scanner(System.in);
        System.out.print("Wie viele Personen: ");
        int[][] aa = new int[s.nextInt()][5];
        for (int i = 0; i < aa.length; i++) {
            System.out.print(i + 1 + ". Person, Geschlecht (w=0, m=1): ");
            aa[i][0] = s.nextInt();
            System.out.print(i + 1 + ". Person, Gewicht (kg): ");
            aa[i][1] = s.nextInt();
            System.out.print(i + 1 + ". Person, Groesse (cm): ");
            aa[i][2] = s.nextInt();
            aa[i][3] = aa[i][1] * 10000 / (aa[i][2] * aa[i][2]);
            System.out.println("BMI = " + aa[i][3]);
            if (aa[i][0] == 0) { // weiblich
                if (aa[i][3] < 19) {
                    aa[i][4] = 0;
                    System.out.println("untergewichtig");
                } else if (aa[i][3] < 29) {
                    aa[i][4] = 1;
                    System.out.println("normalgewichtig");
                } else if (aa[i][3] < 30) {
                    aa[i][4] = 2;
                    System.out.println("uebergewichtig");
                } else {
                    aa[i][4] = 3;
                    System.out.println("behandlungsbeduerftig");
                }
            } else if (aa[i][0] == 1) { // männlich
                if (aa[i][3] < 20) {
                    aa[i][4] = 0;
                    System.out.println("untergewichtig");
                } else if (aa[i][3] < 28) {
                    aa[i][4] = 1;
                    System.out.println("normalgewichtig");
                } else if (aa[i][3] < 30) {
                    aa[i][4] = 2;
                    System.out.println("uebergewichtig");
                } else {
                    aa[i][4] = 3;
                    System.out.println("behandlungsbeduerftig");
                }
            } else {
                System.out.println("Ungueltiges Geschlecht");
                i--;
            }
        }

        double bmiAvr = 0, catAvr = 0;
        for (int i = 0; i < aa.length; i++) {
            bmiAvr += aa[i][3];
            catAvr += aa[i][4];
        }
        bmiAvr /= aa.length;
        catAvr /= aa.length;
        System.out.println("BMIDurchschnitt = " + bmiAvr);
        System.out.println("KategorieDurchschnitt = " + catAvr);

        for (int[] a : aa) {
            System.out.println(Arrays.toString(a));
        }

Wenn man jetzt noch durch die vielen Indices durchfindet... Schöner wärs natürlich mit Objekten...

Btw: Ich (m) war bis vor ein paar Wochen noch untergewichtig, dann 10 Kilo zugenommen und jetzt normalgewichtig 😀
 
also falls du auch mit dieser zweiten Frage noch mich meinst,
sehe ich mich nun leider gezwungen den Witz zu erklären, was man ja nie tun sollte:

es war nur lustig dass du 'Man soll aber niemanden in Schubladen stecken' bei einem Body-Index-Thema geschrieben hast
(also auch über Dicke, da haben wir sie nun), allein darauf eine Standardantwort, ohne irgendwas weiter zu meinen

so, nun hoffentlich gut 😉
 
Ok, alles klar... Bei dem Thema ist das nur irgendwie unvermeidlich... Aber stimmt, das ist das paradoxe daran...
 

Neue Themen


Zurück
Oben