2016-07-19 8 views
2

Ich habe in Java programmiert und ich verwendete die Konstante Integer.MAX_VALUE in meinen Berechnungen, um Programmierprobleme zu lösen.Wie man Konstanten als Eingabe in Java eingibt

Ich frage mich, ob es eine Möglichkeit für Java gab, Integer.MAX_VALUE oder Integer.MIN_VALUE (systemdefinierte Konstanten) zu interpretieren, wenn sie vom Benutzer eingegeben wurden, ohne die offensichtlichen Zeichenfolgenvergleiche auszuführen.

Derzeit verwende ich die Konstanten wie:

int MAXIMUMINTEGER = Integer.MAX_VALUE; 
int MINIMUMINTEGER = Integer.MIN_VALUE; 

Ich würde wollen, dass sie wie folgt verwenden:

System.out.println("Enter a number : "); 
int number = in.nextInt(); 
System.out.println("The number entered is : " + number); 

In der Ausgabekonsole:

Enter a number: Integer.MAX_INT 
The number entered is : 2147483647 

ich suche auf Weisen, Java zu machen, definierte Konstanten als Benutzereingabe zu verstehen.

Jede Hilfe zu diesem wird geschätzt.

+11

Kein lohnen würde, werden Sie Ihre eigene Rolle müssen. –

+0

Quick Suggestion: Verwenden Sie 'ALL CAPITAL' Buchstaben, während Sie Konstanten benennen, um sie von __variablen__ zu differenzieren! – avr

+1

Sie könnten es kompilieren und ToString aufrufen, aber das scheint mehr umständlich als String Vergleich zu tun. –

Antwort

5

Dies ist nicht ohne weiteres möglich, es sei denn, die Werte sind explizit in Ihrem Code angegeben (so der String Vergleich, den Sie erwähnten).

Jedoch könnte es eine hardcore Lösung geben, die den Reflektionsmechanismus verwendet, der im Wesentlichen Meta-Zugriff auf Klassen und ihre Felder ist. Dennoch müssten Sie die Eingabe als Feldnamen zu analysieren, wie folgt aus:

System.out.println("Enter a number : "); 
String input = in.nextString(); 
Class klass = Class.forName("java.lang." + input.split("\\.")[0]); 
Field field = klass.getField(input.split("\\.")[1]); 
int number = field.getInt(klass); 
System.out.println("The number entered is : " + number); 

Dies das erwartete Ergebnis für Ihre Eingabe bekommen würde (vorausgesetzt, Sie passieren Integer.MAX_VALUE und nicht Integer.MAX_INT, da diese kein konstanter Wert ist).

Ich denke, man es in funktionierenden Code machen könnte Integer.valueOf() zuerst und dann die String Parsen verwenden, wenn der Wert ungültig ist.

Dennoch gibt so viele Grenzfälle sind, dass dies kaum es in jedem erdenklichen Szenario :-)

+0

Ich habe den Code aktualisiert, um tatsächlich zu kompilieren, wenn Sie es testen möchten ^^ – Kelevandos