java mit getType() auf mathematisches Symbol überprüfen?

2 Antworten

Hey, wie findest Du sowas hier:

package mathsymbol;

import java.util.List;
import java.util.Random;

public class MathSymbols {

    private static final List<Character> MATH_OPERATORS = List.of('+', '-', '*', '/');
    private static final List<Character> DIGITS = List.of('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');

    public static void main(String[] args) {
        new MathSymbols();
    }

    public MathSymbols() {
        Character test = myRandChar();
        System.out.println(test);

        if (isMathOperator(test)) {
            System.out.printf("Jup, das Zeichen %c ist ein mathematischer Operator%n", test);
        }

        if (isDigit(test)) {
            System.out.printf("Jup, das Zeichen %c ist eine Ziffer.%n", test);
        }

        if (!isMathOperator(test) && !isDigit(test)) {
            System.out.printf("Das Zeichen %c ist weder mathematischer Operator noch eine Ziffer. ", test);
        }
    }

    private char myRandChar() {
        Random ran = new Random();
        return (char) ran.nextInt(257);
    }

    private boolean isMathOperator(Character input) {
        return contains(MATH_OPERATORS, input);
    }

    private boolean isDigit(Character input) {
        return contains(DIGITS, input);
    }

    private boolean contains(List<Character> elements, char input) {
        return elements.contains(input);
    }
}

Von langen if-else Ketten würde ich stark abraten.

Wenn Du noch weiter gehen willst, dann würde ich eher vorschlagen Jedes einzelne Zeichen als Objekt anzulegen und dann könntest Du jedes dieser Objekte "fragen" ob es das betreffende Symbol besitzt.
Und wenn das Objekt das Symbol besitzt, dann könntest Du das Objekt nach allen möglichen Eigenschaften fragen.

Denn eins ist klar, Du könntest keine neuen Typen (mathematischer Operator, Ziffer, etc) anlegen, ohne diese eine Datei zu verändern. Besser wäre einfach ein neues Objekt anzulegen, welches in seiner eigenen Datei "lebt".
Aber ich vermute mal, dass das von deinem Stand her "zu weit" ist, weil Du vermutlich noch Anfänger bist. Da ist alles in die Main-Methode ballern auch okay :)

Gruß

Jathe677 
Fragesteller
 22.05.2022, 13:13

Erstmal vielen Dank für den Code. Ja, bin noch ein blutiger Anfänger in Java ;). Aber kurz zur Bezeichnung :

 private static final List<Character> MATH_OPERATORS = List.of('+', '-', '*', '/');

hier hast du Attribute erstellt, oder?

Den Code sonst verstehe ich gut, da helfen die C-Skills :)

0
AldoradoXYZ  22.05.2022, 13:24
@Jathe677

Ne, das sind keine Attribute, das sind Konstanten.

static final

"static" bedeutet es gehört zur Klasse, nicht zum Objekt

"final" bedeutet, dass die Referenz auf die Liste unverändertlich ist. Wenn man dann noch weiß, dass List.of eine ImmutableCollection liefert (kann man in den Code gucken), dann weiß man, dass sich hier nichts mehr verändern kann (also weder Inhalt, noch Referenz, aka konstant).

"private" heißt dann nur noch, dass es nur innerhalb dieser Klasse, bzw. innerhalb von Objekten der Klasse, genutzt werden kann. Also wenn man so will, eine Konstante nur für die Klasse.

Du könntest übrigens auch die Methoden von Character benutzen, zum Beispiel Chracter.isDigit. Aber ist das dann noch Übung genug für dich?

Gruß

1
Jathe677 
Fragesteller
 22.05.2022, 13:44
@AldoradoXYZ

Die genauen Bezeichnungen kenn ich auch schon, bin aber noch ein bisschen lost, wenn von Attributen und Konstanten gesprochen wird, was ist der Unterschied? Wenn final in der Bezeichnung steht ist es eine Konstante und wenn nur static ein Attribut?

0
AldoradoXYZ  22.05.2022, 19:05
@Jathe677

Ich würde sagen, dass man da etwas aufpassen muss.

Wenn ich mich deutschsprachig umsehe scheint Attribut synoym mit Klassenattribut verwendet zu werden. Ich würde das aber nicht so eindeutig sehen und lieber klar von Klassenattribut und Objektattribut sprechen.

Lieber genau bezeichnen, statt falsch verstanden zu werden.

Gruß

0

Character.getType() gibt Dir die Kategorie als int-Wert zurück, und für jede Kategorie gibt es sogar eine Konstante. Also:

if (Character.getType(test) == Character.MATH_SYMBOL)
Jathe677 
Fragesteller
 22.05.2022, 13:57

Ok, somit ist es echt einfach. Vielen Dank für die Antwort !

0