2017-12-31 104 views
-2

In dem folgenden Code wird die Ausgabe in beiden Schleifen identisch sein. Die getNumericValue kehrt tatsächlich den numerischen Wert von char wenn die char eine Ziffer so 0..9 es int Wert zB zurückgibt. '0'->0 für andere ASCII-Codes gibt es ihren Code zB 'a'->10 zurück.wenn getNumericValue zu verwenden ist

Gibt es einen Punkt bei der Verwendung dieser Methode für Zeichen außer Ziffern (wie im Beispiel-Code)?

Irgendwelche Anwendungsfälle? Ich kann an keinen anderen Anwendungsfall denken, abgesehen davon, dass ich den Zahlenwert char erhalten habe.

char ch; 
    int i =1; 
    for( ch = 'a'; ch <= 'z' ; i++, ch++) 
     System.out.println(ch+" "+i); 
    i=1; 
    for(int j=Character.getNumericValue('a'); j<= Character.getNumericValue('z'); j++,i++ ) 
     System.out.println(i+ " "+j); 

EDIT Nur nicht triviales Beispiel ist beispielsweise das Zeichen ‚\ u216C‘ (die römische Zahl fünfzig) kehrt ein int mit einem Wert von 50

+0

Es ist nicht sehr klar, was Sie mit "gibt es einen Punkt" bedeuten. Sie sollten die Methode verwenden, wenn das dokumentierte Verhalten Ihren Anforderungen entspricht. Ansonsten, benutze es nicht. –

+0

Oder fragst du, ob es Sinn hat, etwas zu benutzen, anstatt * (irgendeine andere Methode, an die du denkst) *? –

+0

@AndyTurner Ich frage mich, was diese Methode bedeutet, wenn ich Unary Numeric Promotion für 'chars' und' Character.digit' für Ziffern verwenden kann. – mCs

Antwort

1

Character.getNumericValue soll Zahl Basen unterstützen größere B. Hexadezimal sind die Buchstaben A bis F auch Ziffern, die 10 bis 15 repräsentieren. Character.getNumericValue erweitert dieses Konzept bis auf z: A ist 10, B ist 11, C ist 12, ..., Z ist 35 (case-insensitive). So funktioniert es für die Ziffern und Buchstaben. Soweit ich aus den Dokumenten ersehen kann, unterstützt es auch andere Nummerierungssysteme, daher die von Ihnen erwähnte römische Ziffer.

Als was der Punkt ist, kommt gut Internationalisierung sofort in den Sinn. Arabische Zahlen sind nicht das einzige Nummerierungssystem, und wenn Sie einen UTF-16-Zeichensatz und eine Methode namens Character.getNumericValue haben, ist es sinnvoll, dass es nicht nur auf das englische Nummerierungssystem beschränkt ist.

+0

Gibt es also einen Unterschied zu 'Character.digit'? EDIT 'Character.getNumericValue ('五')' gibt '-1' zurück, damit es nicht funktioniert? – mCs

+0

Von dem, was ich sagen kann 'Character.Digit' ist für" Computer "Zahlen d. H. 0-9 und A-F, die ich im ersten Absatz erwähnt. 'Character.getNumericValue' ist für" echte "Zahlen gedacht, daher müssen nicht nur mehrere Basen, sondern auch mehrere numerische Systeme unterstützt werden. Und ich fügte hinzu, dass ich es als konzeptionelles Beispiel nicht wirklich getestet habe. Ich denke, ich sollte es entfernen. –

Verwandte Themen