Ausgeben wie oft ein Wert in einem Array vorkommt

SimonOsiris

Mitglied
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.

Soweit so gut, momentan sieht mein Code so aus:

Java:
import java.util.Scanner;
class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        short[] numbers;

        // TODO Put your code here

        numbers = new short[n];
        int[] count = new int[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
 
Bis Zeile 21 sieht es doch erst einmal gut aus.

Aber was Du dann machen willst verstehe ich nicht. Beschreibe es doch erst einmal in Worten, wie Du du da vorgehen könntest.
 
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.
 
Öhm, wie passt:
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.
zu der Anforderung:
Danach soll eine weitere short-Zahl eingelesen werden und gezählt werden, wie oft diese Zahl im gesamten Array vorkommt.

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:
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        short[] numbers;

        // TODO Put your code here

        numbers = new short[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.");

                }

            }
 
für was war das gedacht
Java:
if (numbers[i] == 0) {
                break;
            }
 

Zurück
Oben