Buchstabenzähler-Aufgabe mit Arrays

javaschmava

Mitglied
Hi,
ich möchte ein kleines Programm schreiben, das in einem String (der der Einfachheit halber nur aus Kleinbuchstaben und Leerzeichen besteht)
die Häufigkeit der einzelnen Buchstaben zählt und die dann in einem Array speichert,
also die Häufigkeit von 'a' an der ersten Stelle usw. und die von Leerzeichen an der letzten.
Für a-z funktioniert das auch, aber für das Leerzeichen halt nicht und ich weiß nicht, wieso. Ich finde halt den Fehler nicht :/.
Könnte sich jemand das bitte angucken?

Java:
public class Text
{
    private static int[] _anz;
    private static String _s;
    public Text(String s)
    {
        _anz = new int[27];
        _s = s;
        
    }
    public static void zaehlen()
    {
        for (int i = 0; i < _s.length(); i++)
        {
            for (int j = 0; j < 27; j++)
            {
                if ((int) _s.charAt(i) == 97 + j)
                {
                    _anz[j] += 1;
                }
                if ((int) _s.charAt(i) == 32)
                {
                    _anz[26] += 1;
                }
            }
        }
    }
    {
        
    }
    //zum Testen
    public static void main(String[] args)
    {
        new Text(" ");
        zaehlen();
        for (int i = 0; i < 27; i++)
        {
            System.out.print(_anz[i]);
        }
        // ergibt 0000000000000000000000000027
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Dann spiel das doch einmal durch. Was passiert bei einem Leerzeichen?
Du hast eine Schleife von 0 bis einschliesslich 26 und in dieser Schleife prüfst Du jedes Mal: Ist es ein Leerzeichen um dann jedes Mal den zähler hoch zu zählen ...

Evtl. solltest Du Dir immer erst den Algorithmus im Detail überlegen und diesen dann exakt in Worten nieder schreiben. Das sollte es dir einfacher machen, den Algorithmus selbst durchzuspielen und Fehler zu finden.

So macht es bei so einem Ansatz doch mehr Sinn, da genauer zu unterscheiden Statt da eine Schleife zu haben, könntest Du es direkt per if Statements prüfen:
Du hast die Fälle:
a) das Zeichen ist >= 'a' und <= 'z'. Welcher Index da dann ist, kannst Du auch berechnen mit zeichen - 'a'
b) das Zeichen ist == ' '
c) alles Andere was ggf. als Fehler ausgegeben werden sollte.
(Hier der Hinweis: Statt magischer Zahlen wie 97 kannst Du auch char Literale verwenden wie 'a' oder ' ')
 

javaschmava

Mitglied
Danke Konrad, ich hab das Problem gelöst.

Code:
public static void zaehlen()
    {
        for (int i = 0; i < _s.length(); i++)
        {
            if (('a' <= _s.charAt(i)) && (_s.charAt(i) <= 'z'))
            {
                for (int j = 0; j < 26; j++)
                {
                    if ((int) _s.charAt(i) == 97 + j)
                    {
                        _anz[j] += 1;
                    }
                }
            }
            if (_s.charAt(i) == ' ')
            {
                _anz[26] += 1;
            }
        }
    }
 

KonradN

Super-Moderator
Mitarbeiter
Das ist so nicht korrekt. Du willst ja prüfen 'a' <= zeichen <= 'z' und das hast Du nicht in der if Anweisung. (Da hast du zwei mal "<=" aber beim 'a' müsste es >= sein.

Und statt der Schleife um die Zeichen alle durchzuprüfen: ein char ist eine 16 Bit Zahl und Du kannst mit der Zahl auch rechnen. Du weisst, dass es eines der gewünschten Zeichen ist und Du weisst, dass gilt: zeichen = 'a' + index. Also kannst Du - statt alle indices auszuprobieren, dies doch berechnen: index = _s.charAt(i) - 'a'

Das wäre dann also etwas wie:
Java:
public static void zaehlen() {
    for (int i = 0; i < _s.length(); i++) {
        if (('a' <= _s.charAt(i)) && (_s.charAt(i) <= 'z')) {
            _anz[_s.charAt(i)-'a']++;
        } else if (_s.charAt(i) == ' ') {
            _anz[26] += 1;
        }
    }
}

Edit: Der Part mit dem >= war totaler Quatsch, wie vom TE richtig erkannt und bemerkt. Daher die direkte Anpassung. Sorry für die Verwirrung!
 
Zuletzt bearbeitet:

javaschmava

Mitglied
Sicher? Ich habe doch 'a' <= zeichen <= 'z'.
Wenn ich die erste Ungleichung umdrehe, ist ja ('a' >= _s.charAt(i)) && (_s.charAt(i) <= 'z') äquivalent zu 'a' >= _s.charAt(i), da <= transitiv ist und 'a' <= 'z' und dann ergibt die Bedingung keinen Sinn mehr dafür, was ich machen möchte. Ich möchte ja, dass in dem Fall zeichen zwischen a und z liegt.

In allen Testfällen funktioniert meine Variante aber, bei deiner bekomme ich eine IndexOutOfBoundsException.
Viele Grüße
 

KonradN

Super-Moderator
Mitarbeiter
Sicher? Ich habe doch 'a' <= zeichen <= 'z'.
Ja, Du hast Recht, da war ich irgendwie komplett neben der Spur. Da passiert wenn man während der Arbeit kurze Pausen für schnelle Blicke ins Forum nutzt und sich zu wenig Zeit nimmt. Deine beiden <= waren natürlich korrekt und ich streiche den Part bei meinen Posts noch. Sorry für die Verwirrung! Aber der Part mit der inneren Schleife sollte aber korrekt sein ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Buchstabenzähler Java (Anfänger) Java Basics - Anfänger-Themen 35
J Buchstabenzähler funktioniert nicht. Java Basics - Anfänger-Themen 2
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
G matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
StevenGG Aufgabe im Studium Java Basics - Anfänger-Themen 36
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
T Aufgabe zum Verschlüsselungsalgorithmus Java Basics - Anfänger-Themen 11
J Erste Schritte Aufgabe Java Basics - Anfänger-Themen 24
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
A Aufgabe: Gleitkommazahlen Java Basics - Anfänger-Themen 3
A Java-Programmierungs Aufgabe Java Basics - Anfänger-Themen 2
U Aufgabe zu Kontrollstrukturen Java Basics - Anfänger-Themen 8
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
J Aufgabe als Feuertaufe Java Basics - Anfänger-Themen 8
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
H aufgabe 4 Java Basics - Anfänger-Themen 297
M Hilfe bei Projektorientierungs-Aufgabe !! Java Basics - Anfänger-Themen 3
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
H java aufgabe Java Basics - Anfänger-Themen 7
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
H was verlangt die aufgabe ? Java Basics - Anfänger-Themen 10
H java aufgabe Java Basics - Anfänger-Themen 68
H java aufgabe Java Basics - Anfänger-Themen 25
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
R Java Aufgabe (Teilbarkeit) Java Basics - Anfänger-Themen 7
H java aufgabe Java Basics - Anfänger-Themen 44
H java aufgabe Java Basics - Anfänger-Themen 7
H java string aufgabe Java Basics - Anfänger-Themen 10
H array aufgabe Java Basics - Anfänger-Themen 13
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
H aufgabe Java Basics - Anfänger-Themen 9
H lösung aufgabe Java Basics - Anfänger-Themen 12
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
H java online aufgabe Java Basics - Anfänger-Themen 4
H Array aufgabe Java Basics - Anfänger-Themen 7
H oop aufgabe probe kalusur Java Basics - Anfänger-Themen 11
H oop aufgabe Java Basics - Anfänger-Themen 19
H JAVA AUFGABE Java Basics - Anfänger-Themen 7
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
J Problem bei Aufgabe "Geldstückelung" Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben