Java - String auf Ziffern überprüfen

Bender86

Lieutenant
Registriert
Jan. 2007
Beiträge
718
Moinsen!

Ich habe mir grade ein kleines AWT Progrämmchen geschrieben, dass das Quadrat einer Zahl berechnet. Uiuiuiui... :D Das ganze sieht grade so aus:

Code:
/**
 * Die Klasse Quadrier.
 * 
 * @author Andreas Bender
 * @version 0.4
 */
import java.awt.*;
import java.awt.event.*;

public class Quadrier extends Frame {

    // Deklarieren der Variable "field", damit sie später bei der Berechnung
    // verwendet werden kann
    TextField field;
    
    public Quadrier() {
        
        // Header und Buttons definieren
        super("Der ultimative Quadrierer");
        Label header = new Label("Bitte eine Zahl eingeben");
        field = new TextField("Zahl", 10);
        Button calcButton = new Button("Berechnen");
        Button exit = new Button("Beenden");
        
        // Action Listener erzeugen
        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(e.getActionCommand().equals("Beenden")) {
                    dispose();
                    System.exit(0);
                }
                else if(e.getActionCommand().equals("Berechnen")) {
                    calculateQuad();
                }
            }
        };
        
        // Action Listener an die Buttons binden
        exit.addActionListener(listener);        
        calcButton.addActionListener(listener);
        
        Panel container = new Panel();
        container.setLayout(new FlowLayout());
        container.add(header);
        container.add(field);
        container.add(calcButton);
        container.add(exit);
        
        this.add(container);
        
        this.enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    }
    
    // Berechnung und Ausgabe des Quadrates
    protected void calculateQuad() {
        if(!field.getText().isEmpty()) {
            int number = Integer.parseInt(field.getText());
            int quad = number * number;
            System.out.println("" + number + " zum Quadrat ist: " + quad + "");
        } else {
            System.out.println("Bitte geben sie eine Zahl ein!");
        }
    }
    
    // Ermöglicht das Schließen des Fensters über den Schließen-Button
    protected void processWindowEvent(WindowEvent e) {
        if(e.getID() == WindowEvent.WINDOW_CLOSING) {
            dispose();
            System.exit(0);
        }
    }
    
    // Erzeugt ein neues Quadrier-Objekt und macht es sichtbar
    public static void main() {
        Quadrier q = new Quadrier();
        q.pack();
        q.setVisible(true);
    }
}

Aaalso der Punkt ist nun folgender: Im TextField "field" kann man ja nun etwas eingeben und davon soll das Quadrat berechnet werden. Eine Abfrage ob die Eingabe leer war hab ich schon gemacht. Jetzt will ich aber auch, dass sobald die Eingabe nicht ausschließlich aus Zahlen besteht eine Fehlermeldung ala "Ungültige Eingabe" oder sowas ausgegeben wird.

Das einzige was mir jetzt einfällt, wäre mit charAt() den String zu durchlaufen und jedesmal mit if-Vergleich mit allen Zahlen zu vergleichen, aber da gibts doch bestimmt schon eine von Java vorgegebene Methode oder?
 
Das mit dem Durchlaufen wäre schon eine gute Möglichkeit, wobei du nicht auf alle Zahlen abfragen musst, sondern die Methode isDigit der Klasse Character verwenden kannst. Diese erwartet einen char als Übergabewert und gibt true zurück, falls dieser char eine Ziffer ist.

Außerdem könnte die Klasse DecimalFormat was für dich sein. Damit kann man per parse-Methode auch Zahlen einlesen und bei einer Exception war die Eingabe fehlerhaft.
 
Zuletzt bearbeitet:
Danke für die Antworten!

Simpson474 schrieb:
Das mit dem Durchlaufen wäre schon eine gute Möglichkeit, wobei du nicht auf alle Zahlen abfragen musst, sondern die Methode isDigit der Klasse Character verwenden kannst. Diese erwartet einen char als Übergabewert und gibt true zurück, falls dieser char eine Ziffer ist.

Außerdem könnte die Klasse DecimalFormat was für dich sein. Damit kann man per parse-Methode auch Zahlen einlesen und bei einer Exception war die Eingabe fehlerhaft.

Ich hab das mal probiert und hab da jetzt:

Code:
// Diese Methode liefert einen Boolean zurück, ob ein String ausschließlich
// Zahlen enthält (true) oder auch andere Zeichen (false).
    protected boolean checkLetters(String s) {
        for(int i = 0; i < s.length(); i++) {
            if(!s.charAt(i).isDigit()) {
                return false;
            }
        }
        return true;
    }

Da bekomm ich aber beim Compilieren die Fehlermeldung "char cannot be dereferenced". Was ist denn da falsch? Ich nehme doch einen Char an der Position "i" und wende darauf die Methode an..

(Die Fehlermeldung bezieht sich auf die Zeile if(!s.char....) )

Darii schrieb:
Fang doch einfach die Exception ab, wenn parseInt fehlschlägt.

Durch Exceptions blicke ich ehrlich gesagt noch nicht so richtig durch. :eek: Wie würde das funktionieren?
 
Ok das mit den Exceptions hat sich erledigt, da hab ich jetzt ein recht anschauliches Tutorial gefunden (Wen es interessiert, hier: -Link- ). Falls mal jemand auf diesen Thread stoßen sollte, die "calculateQuad()" Methode sähe dann so aus:

Code:
    protected void calculateQuad() {
        if(!field.getText().isEmpty()) {
            try {
                int number = Integer.parseInt(field.getText());
                int quad = number * number;
                System.out.println("" + number + " zum Quadrat ist: " + quad + "");
            } catch(NumberFormatException e) {
                System.out.println("Ungültige Eingabe!");
            }
        } else {
            System.out.println("Bitte geben sie eine Zahl ein!");
        }
    }

Allerdings würde mich noch interessieren, wo der Fehler mit dem "isDigit" liegt. :)
 
Zuletzt bearbeitet:
Das Problem ist, dass dir die charAt()-Methode einen char zurückliefert, also den primitiven Datentyp, nicht ein Objekt der Klasse Character. Und ein primitiver Datentyp kann eben nicht dereferenziert werden :)

Nachtrag: isDigit() ist eine statische Methode der Klasse Character, deine if-Anweisung müsste also so aussehen:
Code:
if(!Character.isDigit(s.charAt(i))) { ...
 
Zuletzt bearbeitet:
Zurück
Oben