Hallo zusammen,
ich habe ein Problem wo ich Hilfe benötige.
Kurze Erklärung: Ich habe eine JTable mit vielen Daten, von dort aus packe ich alles in ein 2D-String-Array. Danach benutze ich JFreeChart und baue mir ein Chart (“eine Pyramide”) wo ich die männlichen und weiblichen im Alter von 18-65 aufzeige.
Soweit funktioniert das alles.
Was will ich tun: 2 Dinge
Ich will die Leute (männlich/weiblich) die ich ja in der Pyramide habe alle um “x” Jahre altern lassen. Ich habe ein Eingabefeld wo ich die “Jahre” abfrage und berechne die Pyramide neu. Nun ist es aber so, dass alle natürlich um “x” Jahre älter werden, aber ich möchte die Leute zwischen “19 und 21” Jahren mit 2% der gesamten Menge nachbesetzen. So das es keine Lücken gibt in der Pyramide, wenn sie altern.
D.h. ich gucke mir den Stand der Leute an (bsp.: es sind 10.000) und rechne davon 2% aus (200 Leute). Diese sollen 200 Leute sollen zu 75% männlich sein und 25% sollen weiblich sein (einfach ausgedacht).
Wenn jemand jetzt x=5 eingibt, sollen Sie ja alle um 5 Jahre älter werden und die Nachbesetzung soll jedes Jahr stattfinden. Somit sollten ja keine Lücken in der Pyramide entstehen.
Problem: Ich kriege es nur für x=1 hin…aber nicht für x=n2).
Im Alter von 23-50 will ich von der gesamten Menge jedes Mal 1,5% rausschmeisen (männlich und weiblich).
Problem: Ich kriege es nur für x=1 hin … aber nicht für x=n
Java Code:
for (int iAlter = 65; iAlter >= 18; iAlter--) {
double dAnzahlMann = 0;
double dAnzahlFrau = 0;
dSchwankungBerechnungManner = 0;
dSchwankungBerechungFrauen = 0;
dAzubiBerechnungFrauen = 0;
dAzubiBerechnungManner = 0;
for (int i = 0; i < sPrognoseArray.length; i++) {
//iJahrEingabe: Eingabe über ein Feld (integer)...alle um "x" Jahre erhöhen
iNeuesAlter = Integer.parseInt(sPrognoseArray**[iAlterJahre]) + iJahrEingabe;
if (iNeuesAlter == iAlter && sPrognoseArray**[iAktive] != null && Double.parseDouble(sPrognoseArray**[iAktive]) > 0) {
if (sPrognoseArray**[iGeschlecht].equals("männlich") {
dAnzahlMann++;
}
else if (sPrognoseArray[iGeschlecht].equals("weiblich") {
dAnzahlFrau++;
}
}
}
//===Azubis berechenn ===
dAzubiBerechnung = (iGesamtAnzahl * dAzubiEingabe) / 100;
dAzubiBerechnungFrauen = ( (dAzubiBerechnung * 0.25 ) / 3);
dAzubiBerechnungManner = ( (dAzubiBerechnung * 0.75 ) / 3);
if (iAlter = 19) {
dAnzahlMann += dAzubiBerechnungManner;
dAnzahlFrau += dAzubiBerechnungFrauen;
}
//=== Schwankung berechnen ===
if (iAlter = 23) {
dSchwankungBerechnungManner = (dAnzahlMann * dSchwankungEingabe)/ 100;
dAnzahlMann -= dSchwankungBerechnungManner;
dSchwankungBerechungFrauen = (dAnzahlFrau * dSchwankungEingabe) / 100;
dAnzahlFrau -= dSchwankungBerechungFrauen;
}
dataPrognose.addValue(dAnzahlMann, sMann, String.valueOf(iAlter));
dataPrognose.addValue((-1) * dAnzahlFrau, sFrau, String.valueOf(iAlter));
}```
Ich hoffe ich konnte das Problem (die Berechnungen) einigermaßen gut erklären. Sitze da schon eine Weile dran und komme nicht weiter... Sorry für den ganzen langen Text.
Vielleicht hat einer ja Zeit und Lust mir dabei zu helfen...
Gruß
Trotz des Textes habe ich es nicht verstanden. Es klingt aber, als wären da einige Strukturen etwas ungünstig gewählt (wenn man das, ohne es verstanden zu haben, beurteilen kann). Sowas wie
sPrognoseArray**[iAlterJahre]
sPrognoseArray**[iAktive]
sPrognoseArray**[iGeschlecht]
sieht stark nach etwas aus, wofür man eine
class Person {
int getAlter() { ... }
boolean getAktive() { ... } // ???
String getGeschlecht() { ... }
}
spendieren könnte.
Vielleicht wäre es schon hilfreich, den Ablauf an sich irgendwie aufzuteilen:
void erhöheAlter(int jahre) { … }
void machDasMitDenAzubisDa() {…}
void machDasMitDerSchwankung() { … }
void aktualisierePrognose() { … }
und die eben auf geeigneten Datenstrukturen arbeiten lassen…
Hallo Marco13,ich versuch es nochmal zu erklären (achja, sorry wegen der Formatierung, mein Browser stellt es nicht sauber da :(…). Die Tips die du mir gegeben hast, werde ich auch noch berücksichtigen!Ich laufe über mein 2D-String-Array rüber und schaue nach wieviele männliche/weibliche Personen es gibt im Alter von 18-65 Jahren und stelle sie im JFreeChart dar. Das funktioniert auch alles soweit.Nun möchte ich aber eine Prognose für das nächste Jahr (und für das n-te Jahr machen). Ich will über ein Eingabefeld abfragen, welches Jahr berechnet werden soll. Dort gibt der Benutzer dann die Zahl ein und es soll eine Art Prognose erstellt werden. Wenn ich die 1 eingebe, funktioniert das alles wunderbar. Sobald ich größer 1 eingebe, haut es nicht mehr hin. Es kommen nicht die erwarteten Werte herraus.Bsp.: Ich gebe 2 einAlle sind ja nun 2 Jahre gealtert und sollten ja in der Skala 2 hoch rutschen. Somit würde unten (also bei 18Jahren) eine Lücke entstehen, weil ja nichts nachkommt. D.h. Leute die 40 Jahre Alt waren, sind nun 42, Leute die 65 Jahre Alt waren, fliegen nun ganz raus usw. Die Lücke die unten entsteht, möchte ich nachbesetzen.Ich habe eine Gesamtanzahl von Leuten (männlich und weiblich): iGesamtAnzahl (sagen wir es sind 10.000)Von dieser Menge möchte ich 2% ausrechnen (wären 200 Leute). Von denen möchte ich wieder 75% männlich ausrechnen und 25% weiblich. Die möchte ich nun aufteilen auf das Alter von 19-21 Jahren.Soweit, dass was ich vor habe (=== Azubi berechnen ===), das ist folgender Teil: Java Code:
[LEFT][ol]
[li][FONT=Courier New]dAzubiBerechnung = (iGesamtAnzahl * dAzubiEingabe) / 100; dAzubiBerechnungFrauen = ( (dAzubiBerechnung * 0.25 ) / 3); dAzubiBerechnungManner = ( (dAzubiBerechnung * 0.75 ) / 3); if (iAlter = 19) { dAnzahlMann += dAzubiBerechnungManner; dAnzahlFrau += dAzubiBerechnungFrauen; }[/li][/ol][/FONT]
[/LEFT]
Danach möchte ich “Schwankungen” berechnen, im Alter von 23-50 Jahren. Dort möchte ich von der Gesamten Menge (iGesamtAnzahl, also 10.000) 1,5% Leute berechnen und einfach rausschmeisen.Das ist folgender Teil: Java Code:
[LEFT][ol]
[li][FONT=Courier New]if (iAlter = 23) { dSchwankungBerechnungManner = (dAnzahlMann * dSchwankungEingabe)/ 100; dAnzahlMann -= dSchwankungBerechnungManner; dSchwankungBerechungFrauen = (dAnzahlFrau * dSchwankungEingabe) / 100; dAnzahlFrau -= dSchwankungBerechungFrauen; }[/li][/ol][/FONT]
[/LEFT]
Anschließend packe ich das alles in ein DataSet und baue mir per JFreeChart eine neue “Pyramide”.Ich hoffe jetzt ist es einigermaßen klarer geworden? Falls nicht, bitte Fragen…sitze nun seit ein Paar Tagen daran und kriege es einfach nicht hin…Danke schön.
Hmja… so weit… einige Punkte des grundsätzlichen Ziels waren schon klar. Nur ist es schwer, das, was du sagst, mit dem Code in Einklang zu bringen. Es gibt mindestens zwei mögliche Antworten, die aber nur bedingt hilfreich oder sinnvoll sind:
1.: Ja, da ist eben ein Fehler drin. Den musst du mit einem Debugger oder ein paar System.out.println’s suchen
2.: Was auch immer du machst, wenn “1” eingegeben wird: Mach das gleiche einfach “n” mal, wenn “n” eingegeben wird
Die sinnvollere Antwort wäre eben sowas wie: “Überlege dir, auf welchen Daten du welche Operationen durchführen willst, und erstelle dir die passenden Klassen und Methoden.”. Aber das ist vermutlich zu wenig konkret.
Aber zumindest ist mir eben beim zweiten Drüberschauen aufgefallen, dass es nicht
if (iAlter = 19) {
sondern
if (iAlter == 19) {
heißen müßte (genauso bei 23…)
Komisch…irgendwie kopiert er den Text nicht so rein wie ich ihn habe.Es heist eigentlich:if (iAlter = 19){ dAnzahlMann += dAzubiBerechnungManner; dAnzahlFrau += dAzubiBerechnungFrau;}und:if (iAlter = 23){ …}Trotzdem Danke erstmal…ich versuche es mal weiter…
Komisch, jetzt schon wieder… er formatiert den Text den ich schreibe.Ich will sagen:Wenn (iAlter kleinerGleich 21 UND UND iAlter größerGleich 19){dann…}
Woh… du brauchst den Code nicht so manuell zu formatieren. Einfach in einen ```-Codeblock reinpacken (wie es oben L-ectron-X für dich nachträglich gemacht hat) sollte es schon tun…