2010-06-03 30 views
10

Je suis en train d'apprendre Java et j'essaie d'obtenir mon programme pour récupérer le premier chiffre d'un nombre - par exemple 543 devrait retourner 5, etc. Je pensais convertir en une chaîne, mais je Je ne suis pas sûr de savoir comment je peux le convertir en retour? Merci pour toute aide.Récupérer le premier chiffre d'un nombre

int number = 534; 
String numberString = Integer.toString(number); 
char firstLetterChar = numberString.charAt(0); 
int firstDigit = ???? 
+0

Que voulez-vous faire pour les nombres négatifs? – DJClayworth

+0

dans mon cas, le nombre ne devrait jamais être négatif, donc je ne me soucie pas vraiment – Michoel

+0

Multipliez le nombre par -1 si elle est négative, puis continuez comme d'habitude. –

Répondre

19
int number = 534; 
    int firstDigit = Integer.parseInt(Integer.toString(number).substring(0, 1)); 
+3

c'est honnêtement ** tellement ** beaucoup plus simple/utilisable que toutes les réponses ésotériques/trop complexes et algorithmiques dans d'autres endroits tels que http://stackoverflow.com/questions/2051817/return -first-digit-of-an-integer - peut-être que cela ne va pas évoluer dans une application scientifique mainframe avec 20 chiffres ... mais qui les écrit de toute façon? – mmcrae

0

Integer.parseInt prendra une chaîne et retourne un int.

+1

merci pour le pourboire! – Michoel

0
int firstDigit = Integer.parseInt(Character.toString(firstLetterChar)); 
1
int number = 534; 
String numberString = "" + number; 
char firstLetterchar = numberString.charAt(0); 
int firstDigit = Integer.parseInt("" + firstLetterChar); 
+1

Y at-il une raison pour laquelle vous préférez faire numberString = "" + nombre au lieu de numberString = Integer.toString (nombre)? – Michoel

+0

Il est juste paresseux de taper le tout :) –

+0

@Dimitris True. :) Mais "" + int = String est un idiome Java – Adam

16
firstDigit = number/((int)(pow(10,(int)log(number)))); 

Cela devrait obtenir votre premier chiffre à l'aide des mathématiques au lieu de chaînes.

Dans votre exemple log (543) = 2,73 qui casté à un int est 2. pow (10, 2) = 100 543/100 = 5,43, mais puisqu'il est un entier, il est tronqué à 5

+0

serait intéressant de voir comment les benchmarks contre les opérations de cordes – Arkadiy

+2

ont l'air amusant mais y a-t-il des avantages à le faire de cette façon? Si je lisais cette ligne et je ne suis pas un professeur de maths je n'aurais aucune idée de ce qu'il fait :-) – Michoel

+0

Eh bien, le journal de 100 est de 2 et le journal de 999 est 2,99 de sorte que vous pouvez voir que le journal renvoie le numéro de chiffres moins un si stocké comme int. Le nombre de chiffres vous indique à quoi diviser le nombre. Ensuite, nous utilisons le pouvoir incorporé de int pour tronquer tout après la décimale en nous laissant le premier chiffre. Je ne peux pas vous dire quel chemin est plus rapide cependant. Je voulais juste proposer une solution alternative qui ne nécessite pas de convertir le nombre en chaîne. –

27

presque certainement plus efficace que l'utilisation de chaînes:

int firstDigit(int x) { 
    while (x > 9) { 
     x /= 10; 
    } 
    return x; 
} 

(. fonctionne uniquement pour les entiers non négatifs)

0

Cet exemple fonctionne pour tous les doubles, pas seulement des nombres entiers positifs et prend en compte les nombres négatifs ou ceux qui sont moins d'un. Par exemple, 0.000053 retourneraient 5.

private static int getMostSignificantDigit(double value) { 
    value = Math.abs(value); 
    if (value == 0) return 0; 
    while (value < 1) value *= 10; 
    char firstChar = String.valueOf(value).charAt(0); 
    return Integer.parseInt(firstChar + ""); 
} 

Pour obtenir le premier chiffre, ce colle avec manipulation de chaînes car il est beaucoup plus facile à lire.

2
int number = 534; 
int firstDigit = number/100; 
opérateur

(/) en java diviser les chiffres sans tenir compte du rappel alors quand on divise 534 par 100, il nous donne (5).

mais si vous voulez obtenir le dernier numéro, vous pouvez utiliser (%) opérateur

int lastDigit = number%10; 

qui nous donne le rappel de la division, de sorte que 534% 10, donnera le numéro 4.

+0

@Maysera, l'ajout de code uniquement réponse est généralement considéré comme de mauvaise qualité post. Il raconte autre chose mais pas pourquoi cet extrait résout le problème. S'il vous plaît pour mettre à jour votre réponse. –

+0

@MaherAbuthraa Je viens de le faire – Maysara

0

De cette façon pourrait plus de sens si vous ne voulez pas utiliser des méthodes str

int first = 1; 
for (int i = 10; i < number; i *= 10) { 
    first = number/i; 
} 
Questions connexes