Methoden Histogramm, Methode berechnet falsch.

LiPP

Mitglied
Hallo zusammen,

ich habe folgendes Problem:
Die Methode sterneAnzahl gibt mir zurück das "sterneAnzahl" = {0,0,10,0,0} ist.
Die Eingabe Array sind "vorkommen" = {1,2,8,1,1,6},
und "hoechste" = {2,8}.
sterneAnzahl müsste oder sollte besser gesagt = {1,3,10,1,1,8}

Code:
    public static int[] sterneAnzahl(int [] vorkommen, int[] hoechste){
       
        double[] rechnen = new double[6];
        int[] sterneAnzahl = new int[6];
       
        for(int i = 0;i<vorkommen.length;i++){
           
            rechnen[i] = (vorkommen[i]/hoechste[1])*10;
            sterneAnzahl[i] = (int) rechnen[i];
        }
       
        return sterneAnzahl;
    }
 
sterneAnzahl müsste oder sollte besser gesagt = {1,3,10,1,1,8}
Wie kommst du denn darauf??
Dein Algorithmus teilt einfach alle Zahlen im vorkommen Array durch 8 (die 2. Zahl im hoechste-Array, die erste Zahl wird offenbar gar nicht verwendet), dabei wird, da sowohl vorkommen als auch hoechste[1] int Variablen sind, automatisch abgerundet. Dann wird das Ergebnis mit 10 multipliziert.
1,2 und 6 sind kleiner als 8, das Ergebnis der Division ist 0, mal 10 ist immer noch null.
8 durch 8 ist 1, mal 10 ist 10?
Ausserdem fällt mir gerade auf, dass du bei sterneAnzahl ein Element unterschlagen hast, nämlich die letzte 0.
Weiter:
- das Array rechnen ist überflüssig. Du kannst die Ergebnisse direkt in sterneAnzahl schreiben.
- sterneAnzahl sollte nicht mit einer festen Länge von 6 initialisiert werden, sondern mit vorkommen.length, ansonsten fliegt in der for-Schleife eventuell eine Exception.
 
Danke für die Antwort.
Ich habe gedacht da rechen double ist würde nicht abgerundet. Die erste Zahl wird hier nicht verwendet aber an anderer Stelle vom Programm. Wollte es so einfach wie möglich halten, da es mir nur um die for schleife geht.
 
Fürs nächste Mal kannst du bitte gleich in deinem Eingangspost schreiben, was eine Methode oder ein Codeabschnitt machen soll und nicht was für ein Ergebnis sie liefern soll.
Versuchs mal mit
Java:
sterneAnzahl[i] = (int)Math.round(vorkommen[i]*10.0/hoechste[1]);
 
Im Array steht welches Zahl wie oft vorkommt. An erster Stelle die Zahl und tanzweiter stelle das vorkommen. Im Fall oben kam die 2 8mal vor.
 

Neue Themen


Zurück
Oben