Fehlersuche Buchstabenhäufigkeiten

KnightMove

Mitglied
Das folgende Programm soll einen Text nehmen, alles in Großbuchstaben ändern und die Anzahlen der Buchstaben als Histogramm darstellen. Das Ändern in Großbuchstaben funktioniert aber nicht - Kleinbuchstaben ignoriert das Programm. Könnt ihr mir bitte helfen, den Fehler zu finden?

Java:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Aufgabe26 {

        public static void Balkendiagramm (String s){
        
    
        
        char []array ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','Ä','Ö','Ü'};
        int []arrayHäufigkeit=new int[29];
        Scanner text1 =new Scanner (s);
        ArrayList<String> WortAnzahl= new ArrayList<String>();
       while (text1.hasNext()){
           String t=text1.next();
           if (!WortAnzahl.contains(t)){
               WortAnzahl.add(t);
           }
           
       }
       
       int y=0;
        for (int u=0;u<29; u++){
      Scanner text = new Scanner (s);
        int q=0;
            while (text.hasNext()){
            
            String t =text.next();
            t.toUpperCase();
            
            for (int z=0; z<t.length();z++){
                
                if (t.charAt(z)==array[u]){
                    q++;
                        
                }
                
                
            }

        }
            arrayHäufigkeit [u]= q;
           y=y+q;           
            
            
            
        }
        
        int b= (y/2);
        
     for (int h=0; h<b; h++){
         for (int r=0;r<29; r++){
            
             if (h<b-arrayHäufigkeit[r]){
                 System.out.print(" ");
             }
             else {
                
                 System.out.print("*");
             }
            
            
            
            
            
            
            
         }
         System.out.println();
        if (h==b-1){
            for (int p=0;p<29;p++){
                System.out.print(array[p]);
                
            }
        }
     }
        
  
        
        
        
        
    }

    public static void main(String[] args) {
       String a ="DAS IST EIN BEISPIEL FÜR" +
       		"EINEN TEXT WIE ER IN EINER" +
       		"TEXTDATEI STEHEN KöNNTE.";
        
    Balkendiagramm(a);

    }

}
 
M

maki

Gast
Strings sind immutable, d.h. unveränderlich, Methoden die etwas verändern geben einen neuen String zurück, wie toUpperCase zB.
 

Andi_CH

Top Contributor
Java:
t = t.toUpperCase()

und noch einige Hinweise:

Java:
	public static void balkendiagramm (String s){
		char[] array = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','Ä','Ö','Ü'};
		int[] arrayHaeufigkeit = new int[array.length]; // nicht int[29]

array ist eine sehr ungeschickte Bezeichnung, da sollte ein Bezeichner hin, der aussagt, was der array für eine Funktion hat oder was er beinhaltet - wie wärs mit alphabet? zeichensatz?
ausserdem sollte der final gemacht werden - der wird ja nicht mehr verändert.

Verwenden von array.length ist besser als 29 hinzuschreiben -> überall so 29 steht gehört array.length hin.

Etwas "Luft" im Code macht den lesbarer
Java:
if (h == (b - 1)){
im Gegensatz zu
Java:
if (h==b-1){
(Ja die Klammer um b - 1 ist nicht nötig, aber es soll ja nur ein Beispiel sein)
 

Ähnliche Java Themen

Neue Themen


Oben