2010-03-28 13 views
6

nous pouvons convertir le caractère en un entier équivalent à la valeur ASCII de la même chose mais pouvons-nous faire l'inverse c'est-à-dire convertir une valeur ASCII donnée à son équivalent de caractère?pouvons-nous convertir nombre entier en caractère

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;   
} 

montre possible perte d'erreur de précision ...

+2

Il est dit erreur de perte de précision car un int peut contenir un nombre plus grand qu'un caractère. Vous pouvez donc lancer n'importe quel personnage dans un int, mais la partie supérieure des ints est trop grande pour être convertie en personnage. – Joel

Répondre

8

Convertir en/de:

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

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

nopes, il est dit perte de précision possible – higherDefender

+7

@ D.J., La perte de précision possible ne s'applique pas à la plage de caractères ASCII. – Yishai

1

Est-ce pas le transtypage de char travail?

+0

nopes il dit possible perte de précision – higherDefender

+0

Vraiment? Fonctionne quand je l'essaye avec java/javac 1.6. –

0

Il y a plusieurs façons. Regardez la classe de wrapper Character. Character.digit() peut faire l'affaire. En fait, cela fait l'affaire !!

Integer.valueOf('a') 
+3

D.J. demande un nombre entier à un caractère, et non l'inverse. – Ricket

3

Character.toChars:

public static char[] toChars(int codePoint) 

convertit le caractère spécifié (point de code Unicode) pour sa représentation UTF-16 stockée dans un tableau de caractères.

5

Vous ne fait même pas besoin d'un casting:

char c = 126; 

Et cela semble en fait de travailler pour les caractères unicode ainsi. Par exemple, essayez:

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

L'erreur est plus complexe que vous penseriez d'abord, parce qu'il est en fait l'opérateur « + » qui provoque la « perte possible d'erreur de précision ». L'erreur peut être résolu si la distribution est déplacé:

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


Explication
Dans la première liste à puces de §5.6.2 Binary Numeric Promotion dans le Java Language Specification il est dit que:

Lorsqu'un opérateur applique promotion numérique binaire à une paire d'opérandes [...] les règles suivantes s'appliquent, dans l'ordre, en utilisant la conversion d'élargissement (§5.1.2) pour convertir les opérandes selon les besoins:

  • Si l'un des opérandes est d'un type de référence, la conversion d'unboxing (§5.1.8) est effectuée. Puis:
  • Si l'un des opérandes est de type double, l'autre est converti en double.
  • Sinon, si l'un des opérandes est de type float, l'autre est converti en float.
  • Sinon, si l'un des opérandes est de type long, l'autre est converti en long.
  • Sinon, les deux opérandes sont convertis en type int.

Dans la prochaine liste à puces, il est dit que:

promotion numérique binaire est exécutée sur les opérandes de certains opérateurs:

  • Les opérateurs multiplicatifs *,/et% (§15.17)
  • Les opérateurs d'addition et de soustraction pour les types numériques + et - (§15.18.2)
  • Les opérateurs de comparaison numériques, et> = (§15.20.1)
  • Les opérateurs d'égalité numérique == et! = (§15.21.1)
  • Les opérateurs de bits au niveau entier &,^et | (§15.22.1)
  • Dans certains cas, l'opérateur conditionnel? : (§15.25)

Dans votre cas, cela se traduit par:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
donc l'erreur.

Questions connexes