2010-03-28 25 views
6

możemy przekonwertować znak na liczbę całkowitą równoważną wartości ASCII tego samego, ale czy możemy zrobić odwrotną rzecz, tj. Przekonwertować daną wartość ASCII na jej odpowiednik znaku?czy możemy przekonwertować liczbę całkowitą na znak

public String alphabets(int[] num) 
{ 
char[] s = new char[num.length]; 
String str = new String(); 
for(int i=0; i< num.length; i++) 
{ 
    s[i] = 'A' + (char)(num[i]- 1); 
    str += Character.toString(s[i]); 
} 
return str;   
} 

pokazuje możliwe stracił błędu precyzji ...

+2

Mówi o błędzie utraty precyzji, ponieważ int może zawierać większą liczbę niż znak. Możesz więc rzucić jakąkolwiek postać do int, ale górny zakres intów jest zbyt duży, by rzucić go na postać. – Joel

Odpowiedz

8

Aby skonwertować do/z:

int i = 65; 
char c = (char)i; 

char c = 'A'; 
int i = (int)c; 
+3

nopes, mówi możliwość utraty precyzji – higherDefender

+7

@ D.J., Możliwa utrata precyzji nie dotyczy zakresu znaków ASCII. – Yishai

1

Nie odlewania do char pracy?

+0

Nopes mówi możliwa utrata precyzji – higherDefender

+0

Naprawdę? Działa, gdy próbuję go z java/javac 1.6. –

0

Istnieje kilka sposobów. Sprawdź klasę opakowania znaków. Character.digit() może załatwić sprawę. Właściwie to załatwi sprawę !!

Integer.valueOf('a') 
+3

D.J. prosi o liczbę całkowitą do postaci, a nie odwrotnie. – Ricket

3

Character.toChars:

public static char[] toChars(int codePoint) 

przekształca określony znak (punkt kodowy Unicode) do jego UTF-16 reprezentacji przechowywane w tablicy char.

5

rzeczywiście nie trzeba nawet Obsada:

char c = 126; 

I to rzeczywiście wydaje się działać dla znaków Unicode, jak również. Na przykład spróbuj:

System.out.println((int) 'โ'); // outputs 3650, a thai symbol 
char p = 3650; 
System.out.println(p); // outputs the above symbol 
6

Błąd jest bardziej skomplikowana niż mogłoby się początkowo wydawać, bo to jest rzeczywiście „+” operator „które powoduje, że ewentualne straty błędu precyzji”. Błąd może zostać rozwiązany, jeśli obsada jest przemieszczana:

s[i] = (char)('A' + (num[i]- 1));


Wyjaśnienie
W pierwszym liście pocisku z §5.6.2 Binary Numeric Promotion w Java Language Specification stwierdza się, że:

Kiedy stosuje operator binarna promocja numeryczna do pary operandów [...] stosuje się następujące zasady, w kolejności, używając konwersji rozszerzającej (§5.1.2) do konwersji argumentów w razie potrzeby:

  • Jeśli którykolwiek z argumentów jest typu referencyjnego, wykonywana jest konwersja rozpakowywania (§5.1.8). Następnie:
  • Jeśli jeden z argumentów jest typu double, drugi jest konwertowany na double.
  • W przeciwnym wypadku, jeśli jeden z argumentów jest typu zmiennoprzecinkowego, drugi jest konwertowany na zmienny.
  • W przeciwnym wypadku, jeśli jeden z operandów ma typ long, drugi jest konwertowany na long.
  • W przeciwnym razie oba operandy są konwertowane na typ int.

W następnym liście pocisku jest powiedziane, że:

Binary promocja numeryczna jest wykonywane na argumentach niektórych operatorów:

  • operatorów multiplikatywne *,/i% (§15.17)
  • dodawania, odejmowania operatorów dla typów numerycznych + i - (§15.18.2)
  • numeryczna operatorów porównania i> = (§15.20.1)
  • Operatory równości liczb == i! = (§15.21.1)
  • Liczba całkowita operatory bitowe &, ^, i | (§15.22.1)
  • W niektórych przypadkach operator warunkowy? : (§15.25)

W twoim przypadku oznacza to:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
stąd błąd.

Powiązane problemy