java mit getType() auf mathematisches Symbol überprüfen?
Hi, also ich soll ein Programm schreiben, dass ein zufälliges Zeichen generiert, den Namen und das Zeichen selbst ausgibt nach mit getypt überprüft ob es ein mathematisches Symbol ist . Ich verstehe nicht wie ich es mit getType realisiere.
Mein Code:
Der Codeteil mit // begrenzt ist nur eine Idee, macht aber kein Sinn so.
public static void main(String[] args) {
char test = myrandChar();
System.out.println(test);
System.out.println((int) test);
//if (test.getType() == Integer.class) {
//System.out.println("Das Zeichen " + (char) test + " ist ein mathematisches Zeichen!");//
}
}
public static char myrandChar() {
Random ran = new Random();
return ((char) ran.nextInt(257));
}
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ß
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ß
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?
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ß
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)
Ok, somit ist es echt einfach. Vielen Dank für die Antwort !
Erstmal vielen Dank für den Code. Ja, bin noch ein blutiger Anfänger in Java ;). Aber kurz zur Bezeichnung :
hier hast du Attribute erstellt, oder?
Den Code sonst verstehe ich gut, da helfen die C-Skills :)