Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo Leute,
ich habe gerade eine Aufgabe vor mir liegen, bei dem der Benutzer per Eingabe entscheidet, wie viele Zahlen ins Array sollen.
Dann soll mein Programm zählen, wie oft eine bzw. dieselbe Ziffer/Zahl im Array vorkommt.
Zum Schluss soll die Zahl und die Häufigkeit/Menge ausgegeben werden.
Ich habe das Ganze mit einem mehrdimensionalen Array/ for-Schleifen und If-Abfragen gemacht. Fast alles klappt perfekt.
Mein Problem ist, dass wenn eine Ziffer/Zahl mehrmals vorkommt, die Ausgabe dann auch genauso oft die Zahl mit der Menge ausgibt. Bei der Ausgabe soll eine Ziffer/Zahl nur einmal vorkommen.
Vorab vielen Dank!
Mein Code:
Java:
public class HaeufigkeitArray {
public static void main (String args []){
int anzahl = InOut.readInt("Wie viele Zahlen? ");
int [][] zahl = new int [anzahl][anzahl];
System.out.println();
for (int i = 0;i < anzahl ;i++) {
zahl [0][i] = InOut.readInt((i+1)+".Zahl -> ");
} // end of for
for (int j = 0;j < anzahl ;j++ ) {
int menge = 0;
for (int k = 0;k < anzahl ;k++ ) {
if (zahl [0][j] == zahl [0][k]) {
menge += 1;
} // end of if
} // end of for
zahl [1][j] = menge;
} // end of for
System.out.println();
for (int l = 0;l < anzahl ;l++ ) {
System.out.println("Zahl: "+zahl[0][l]+", Menge: "+zahl[1][l]);
} // end of for
}
}
Dein Problem ist momentan das du beim Zählen nicht prüfst ob du die selbe Zahl vorher schon mal gezählt hast.
Du zählst also Zahlen die mehrmals vorkommen auch mehrmals.
Dein Problem ist momentan das du beim Zählen nicht prüfst ob du die selbe Zahl vorher schon mal gezählt hast.
Du zählst also Zahlen die mehrmals vorkommen auch mehrmals.
ALso, ich kam auf die Idee eine verschachtelte Schleife zu erstellen, um die Werte im Array miteinander zu vergleichen.
Ich dachte mir, dass ich die mehrmals vorkommenden Zahlen mit einer if-Abfrage dann in der Schleife auf 0 setze, sodass am Ende nurnoch einer der Zahlen übrig bleibt. Aber dann dachte ich, wenn der Benutzer am Anfang eine 0 eingeben würde, dann würde das Ganze schief gehen.
Gibt es vielleicht eine Möglichkeit, die Werte aus einem Array zu "löschen", statt sie auf 0 zu setzen?
Somit könnte ich die Werte löschen, die doppelt vorkommen (natürlich nach dem zählen) und die Werte im Array sozusagen "vorrücken".
Mir ist nur bekannt, dass es mit ArrayList funktionieren soll (laut Internet), doch gibt es eine Möglichkeit ohne "Extras"?
Geht schon .. wäre nur recht Aufwendig für den Usecase (zmd für meinen Geschmack.)
Du könntest die Werte doch auf eine negative Zahl setzen um zu wissen, dass du sie bereits gezählt hast ..
Hoffe du bist noch da
Also, ich habe jetzt 2 weitere Arrays erstellt + 1 Schleife.
Meinst du mit: "Geht schon .. wäre nur recht Aufwendig für den Usecase (zmd für meinen Geschmack.)" sowas?
Java:
public class HaeufigkeitArray {
public static void main (String args []){
int anzahl = InOut.readInt("Wie viele Zahlen? ");
int [][] zahl = new int [anzahl][anzahl];
int [][] zahl2 = new int [anzahl][anzahl];
int [][] ausgabe = new int [anzahl][anzahl];
System.out.println();
for (int i = 0;i < anzahl ;i++) {
zahl [0][i] = InOut.readInt((i+1)+".Zahl -> ");
zahl2 [0][i] = zahl[0][i];
} // end of for
for (int j = 0;j < anzahl ;j++ ) {
int menge = 0;
for (int k = 0;k < anzahl ;k++ ) {
if (zahl [0][j] == zahl [0][k]) {
menge += 1;
} // end of if
} // end of for
zahl [1][j] = menge;
zahl2 [1][j] = menge;
} // end of for
for (int m = 0;m < anzahl ;m++ ) {
for (int n = 0;n < anzahl ;n++ ) {
if (zahl[0][m] == zahl2[0][n] && zahl[1][m] == zahl2[1][n]) {
ausgabe[0][m] = zahl[0][m];
ausgabe[1][m] = zahl[1][m];
zahl2[0][n] = 0;
zahl2[1][n] = 0;
} // end of if
} // end of for
} // end of for
System.out.println();
for (int l = 0;l < anzahl ;l++ ) {
if (ausgabe[1][l] != 0) {
System.out.println("Zahl: "+ausgabe[0][l]+", Menge: "+ausgabe[1][l]);
} // end of if
} // end of for
}
}
Ich verstehe den ganzen Zweck von dem mehrdimensionalen Array nicht. Das scheint mir persönlich sehr aufwendig (und unleserlich/unverständlich). Du gibst die Zahlen letztendlich doch nur in einem eindimensionalen Array ein. Wenn ich vor dieser Aufgabe stünde würde ich die Eingabe eindimensional machen und die gezählten Zahlen in einer Map speichern. Key der Map ist dann die zu zählende Zahl, Value ist die Häufigkeit der Zahl. Dann kannst du schreiben
"Für jedes Element im Array, hole den aktuellen Zählwert aus der Map und inkremetiere diesen. Falls die Zahl in der Map noch nicht existiert, füge die Zahl mit der Häufigkeit 1 hinzu."
Anschließend kannst du alle Key/Value Paare ausgeben.
Ich verstehe den ganzen Zweck von dem mehrdimensionalen Array nicht. Das scheint mir persönlich sehr aufwendig (und unleserlich/unverständlich). Du gibst die Zahlen letztendlich doch nur in einem eindimensionalen Array ein. Wenn ich vor dieser Aufgabe stünde würde ich die Eingabe eindimensional machen und die gezählten Zahlen in einer Map speichern. Key der Map ist dann die zu zählende Zahl, Value ist die Häufigkeit der Zahl. Dann kannst du schreiben
"Für jedes Element im Array, hole den aktuellen Zählwert aus der Map und inkremetiere diesen. Falls die Zahl in der Map noch nicht existiert, füge die Zahl mit der Häufigkeit 1 hinzu."
Anschließend kannst du alle Key/Value Paare ausgeben.
Ja,ich finde es auch nicht schön, aber wir haben in der Schule bis Array "gelernt"(bis jetzt) und sollen die Aufgaben mit dem Stoff lösen, was wir bis jetzt im Unterricht hatten. Maps hatten wir noch nicht, ArrayList genauso wenig. Dürfte ich was anderes benutzen, dann würde Google für mich sofort eine Antwort haben und ich würde dann auch kein "Nudelsalat" erstellen. Außerdem habe ich die mehrdimensionalen erstellt, weil mein Programm sonst noch voller wäre.
Aber trotzdem danke für die Ideen und für deine Hilfe Robat!
Achja immer der Lehrstoff. Aber dann würde ich ein 2 mal n großes Array machen (nicht n mal n) und so die Wertepaare abbilden.
Du hättest dann eingabeArray[anzahl] und zählArray[anzahl][2] wobei zählArray[n][0] die Zahl und zählArray[n][1] die Anzahl ist. Das ZählArray wäre nur "voll" wenn keine Zahl doppelt vorkommt und hat entsprechend viele nullpaare.