2013-01-02 5 views
0

Possible en double:
Java char array to intJava: Problèmes de conversion char int

je le code suivant, où stackCells est un objet ArrayList:

int[] stackCell = {0, 0}; 

if (!stackCells.isEmpty()) { 
    String stackCellString = stackCells.get(0); 
    stackCell[0] = stackCellString.charAt(0); 
    stackCell[1] = stackCellString.charAt(1); 
} 

Ainsi, le problème que je rencontre est que stackCell n'est pas terprétant le caractère en tant que int. Par exemple, la valeur stackCellString doit être "88". Cependant, quand j'utilise chartAt(0) et charAt(1), j'obtiens une valeur int de 56. Si j'utilise ces mêmes appels dans une commande System.out.println(stackCellString.charAt(0) + stackCellString.charAt(1)), j'obtiens le résultat correct (c'est-à-dire "88").

+0

ce qui est 'stackCellString' – Woot4Moo

+0

@ Woot4Moo je l'ai écrit dans le paragraphe. – capcom

+0

@KarthikT Mais je pensais qu'un 'char' pouvait être utilisé comme un' int' sans lancer. J'ai aussi essayé de lancer, sans chance. – capcom

Répondre

1

56 est le code ASCII du chiffre 8. Pour obtenir ce que vous voulez, vous pouvez le faire:

stackCell[0] = stackCellString.charAt(0) - '0'; 
stackCell[1] = stackCellString.charAt(1) - '0'; 
+0

Réponse parfaite. Rien de plus simple. – capcom

+1

La solution la plus simple est de ne pas faire circuler les chaînes en sachant que vous devez les convertir plus tard. – Woot4Moo

+0

@ Woot4Moo Bien sûr, mais je n'ai pas le choix. Le code donné ne donne pas le contexte de mon programme, donc je peux comprendre pourquoi vous pourriez trouver mon approche déroutante. – capcom

0
String stackCellString="88"; 
     stackCell[0] = stackCellString.charAt(0); 
     stackCell[1] = stackCellString.charAt(1); 
     System.out.println(stackCell[0]); 
     System.out.println(stackCell[1]); 
     System.out.println(stackCell[0]+stackCell[1]); 
     System.out.println(stackCellString.charAt(0) + stackCellString.charAt(1)); 

sortie:

56 
56 
112 
112 

Vous n'êtes pas le retour charAt comme sa représentation de caractère.

Si vous voulez revenir vous devez le faire « 88 »:

stackCellString.subString(0,1) + stackCellString.subString(1,2); 

Un autre travail est autour de ceci:

"" + stackCellString.charAt(0) + stackCellString.charAt(1); 
+0

Merci. Mais que suis-je en train de retourner comme mon chemin, sinon la représentation du personnage? – capcom

+0

@capcom vous renvoyez la valeur courte du caractère. – Woot4Moo

+0

Existe-t-il un moyen «peu coûteux» d'obtenir ce que je veux? J'ai besoin des 8s comme valeurs entières, pas de sous-chaînes. – capcom

2

Il est l'interprétation du caractère d'int de la manière suivante :

56 est le code ASCII pour le caractère '8'.

Si vous voulez saisir les chiffres de la chaîne, vous devrez utiliser quelque chose comme Integer.parseInt() comme l'un des commentaires mentionnés.

Une solution plus efficace pourrait être de faire quelques calculs basés sur le code ASCII. Si vous connaissez tous les caractères sont des chiffres décimaux, vous pouvez faire (code - 48) pour obtenir le chiffre (où code est le code ASCII). Par exemple, (56 - 48) = 8, qui est ce que vous voulez ici.

+0

faire parseInt est très cher. – Woot4Moo

+0

True. Alternativement, vous pouvez calculer le chiffre basé sur le code ASCII. – 808sound

+0

Merci beaucoup. ft1 a d'abord répondu à cette idée, donc je lui donne celui-ci. – capcom