2011-04-17 3 views
1

Alors au sommet de mon code, je déclarai la variable private long counter; Et quand je tente de donner un chiffre qui est très long, il donne une erreur, Im essayant de faire counter = 1111111111111111; Cest 16 « 1 "s et je continue à obtenir l'erreur" Le littéral 1111111111111111 de type int est hors de portée "qu'est-ce que je fais mal?Java numéros longs Aide

Répondre

3

Essayez comme ceci:

counter = 1111111111111111l;

Notez que le dernier caractère, il y a la lettre « L » (minuscule, bien sûr), et non pas le numéro un. Voici un exemple plus clair:

counter = 2222222222222222L;

Comme d'autres l'ont souligné, une majuscule « L » fonctionne également et est beaucoup plus claire. Tous les littéraux entiers dans Java sont interprétés comme ints à moins que vous les suffixiez avec un 'L' (ou 'l') pour dire au compilateur de l'interpréter comme long. Une chose similaire se produit avec les nombres littéraux à virgule flottante, qui sont interprétés comme doubles par défaut, sauf si vous les ajoutez un 'f' pour indiquer au compilateur de l'interpréter comme float. Comme dans:

double num1 = 1.0; //1.0 is treated as a literal double 
float num2 = 1.0; //1.0 is still treated as a literal double; the compiler may complain about loss of precision 
float num3 = 1.0f; //1.0 is treated as a float, and the compiler is happy 
+1

c'est un L à la fin, pour les aveugles. – MeBigFatGuy

+0

Ou vous pourriez éviter de tels problèmes visuels et utiliser 'L' majuscule;) –

+0

@Brian Roach - Merci, je ne savais même pas que Java accepterait la version majuscule. – aroth

0

Le problème est que les littéraux numériques sont int s par défaut. Pour que le littéral numérique soit long, vous devez le terminer avec le caractère alphabétique l (L minuscule). Alors:

long counter = 1111111111111111l; 

En C#, vous pouvez également utiliser une majuscule L. Je ne suis pas sûr de Java.

+0

Vous pouvez utiliser, mais IMHO 'L' est préférable pour des raisons visuelles. –

1

Le compilateur java lit n'importe quel nombre comme entier par défaut. 11111111111 est évidemment en dehors de la plage d'un nombre entier. Tapez counter=11111111111L; pour que le compilateur lise correctement la valeur.