Hallo,
Ich versuche ein Programm zu dieser Aufgabenstellung zu schreiben:
Der vorgegebene Code liest die nicht-negative ganze Zahl n ein. Ergänzen Sie den Code, sodass das short-Array numbers mit der Größe n initialisiert wird. Anschließend sollen in einer Schleife so lange Werte ins Array eingelesen werden, bis entweder das Array voll ist oder die Zahl 0 eingegeben wird. Danach soll eine weitere short-Zahl eingelesen werden und gezählt werden, wie oft diese Zahl im gesamten Array vorkommt. Geben Sie dieses Ergebnis wie folgt aus: "Die Zahl <number> kommt <count>-mal vor.
importjava.util.Scanner;classExercise{publicstaticvoidmain(String[] args){Scanner in =newScanner(System.in);int n = in.nextInt();short[] numbers;// TODO Put your code here
numbers =newshort[n];int[] count =newint[n+2];int i, temp =0;for(i =0; i < numbers.length; i++){
numbers[i]= in.nextShort();if(numbers[i]==0){break;}}for(i =0; i < numbers.length; i++){
temp = numbers[i];
count[temp]++;}short gesuchte = in.nextShort();for(i =1; i < count.length; i++){if(count[i]>=1){System.out.printf("Die Zahl "+ gesuchte +" kommt "+ count[i]+" mal vor.");}}}}
Ich versuche gerade herauszufinden wie ich es schaffe dass mein Programm mitzählt wie oft der Wert den ich bei
Code:
short gesuchte = in.nextShort();
einlese in meinem Array vorkommt. Das er mitzählt wie oft eine Zahl vorkommt wollte ich eigentlich mit diesen Teil hier bewirken:
Code:
for (i = 0; i < numbers.length; i++) {
temp = numbers[i];
count[temp]++;
}
allerdings scheint das nicht ganz richtig zu sein oder bei der Ausgabe weiter unten passt irgendetwas nicht. Wisst ihr vielleicht welchen Fehler ich hier mache? Vielen dank schon eimal für eure Hilfe
Also ich habe mir gedacht dass ich in der int variable temp den derzeitigen Wert im Array speichere. Angenommen der erste eingegebene Wert im number Array ist 1, dann soll dieser Wert in temp gespeichert werden, damit später mit count gezählt werden kann wie oft dieser im number Array vorkommt. Wenn also noch eine zweite 1 im Array ist soll die Variable count[temp] den Wert 2 haben, damit ich später ausgeben kann, dass die Zahl 1 in meinem Array 2 mal vertreten ist.
Ich hoffe ich konnte einigermaßen erklären wie mein Gedankenprozess aussah als ich diesen Codeblock geschrieben habe.
Angenommen der erste eingegebene Wert im number Array ist 1, dann soll dieser Wert in temp gespeichert werden, damit später mit count gezählt werden kann wie oft dieser im number Array vorkommt. Wenn also noch eine zweite 1 im Array ist soll die Variable count[temp] den Wert 2 haben, damit ich später ausgeben kann, dass die Zahl 1 in meinem Array 2 mal vertreten ist.
Du machst es Dir etwas zu kompliziert. Du kannst ein Array erzeugen und dann generell erfassen, wie oft jede Zahl vorkommt. Aber da musst Du aufpassen: Was ist der Zahlenbereich von short? Da müsste in dem Zähl-Array für jede mögliche Zahl ein Platz sein. Also auch für negative Werte und so. Ein Array der Größe 2*n reicht da nicht. (Schau einfach einmal: Ich gebe als erste Zahl 4 an - dann ist das Array 4 short Zahlen groß. Und die erste Short Zahl ist 10.000!
Das ist aber so zum Glück nicht notwendig. Du versuchst mehr zu machen als gefordert ist. Es wird ja erst ein Array eingegeben und dann direkt eine Zahl ... und nur diese eine Zahl musst Du zählen ...
Ich habe wieder einmal zu kompliziert gedacht. Nachdem ich noch einmal ein bisschen überlegt habe bin ich zu meiner Lösung gekommen.
Vielen dank KonradN für deine Antwort.
Mein fertiger Code sieht jetzt so aus:
Java:
publicstaticvoidmain(String[] args){Scanner in =newScanner(System.in);int n = in.nextInt();short[] numbers;// TODO Put your code here
numbers =newshort[n];int count =0;int i, temp =0;for(i =0; i < numbers.length; i++){
numbers[i]= in.nextShort();if(numbers[i]==0){break;}}short gesuchte = in.nextShort();for(i =0; i < numbers.length; i++){if(gesuchte == numbers[i]){
count++;}}System.out.printf("Die Zahl "+ gesuchte +" kommt "+ count +" mal vor.");}}