2014-04-22 12 views
5

Come posso memorizzare 08 e 09 in un array int? Capisco che non possono a causa di caratteristiche binarie e hanno provato entrambi ...Java: utilizzo di "08" e "09" in una matrice

0b08, 0b09 ... e ... 0B08, 0B09 senza fortuna.

La seguente riga di codice è idealmente quello che mi piacerebbe avere:

final int[] monthValidDosInputs = {00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12}; 

Qui è l'errore ...

ConvertDate.java:15: error: integer number too large: 08 
ConvertDate.java:15: error: integer number too large: 09 

Grazie!

+2

Non si desidera memorizzare numeri ma stringhe. Usa 'String []' e aggiungi le virgolette attorno ai tuoi valori letterali. –

+0

Stai dicendo di utilizzare le stringhe per memorizzare tutti i valori? 00-12? – ewbrowning

+0

Questo funziona ... ma c'è un modo per rappresentare sia gli 08 che i 09 come ints? – ewbrowning

risposta

12

Quando si avvia un letterale intero con 0, è considerato un ottale numero, uno che usa base 8 anziché base 10. Ciò significa 8 e 9 non sono cifre valide.

Se davvero desidera uno zero (vale a dire, ottale), si avrebbe bisogno di qualcosa di simile a:

int[] monthValidDosInputs = {000, 001, ..., 007, 010, 011, 012, 013, 014}; 

che i numeri decimali 0 attraverso 12, ma in ottale dà.

Tuttavia, se si desidera mantenere uniformemente distanziate con decimali, basta usare uno spazio iniziale invece di zero:

int[] monthValidDosInputs = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 
//       ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 

anche se non sono sicuro che si guadagna nulla da questo. Si può anche usare:

int[] monthValidDosInputs = {0,1,2,3,4,5,6,7,8,9,10,11,12}; 

e si deve fare. Non fa alcuna differenza per il compilatore.


Se stai cercando di utilizzare questi per controllare l'input dell'utente (dove possono entrare 8 o 08 per un mese), è meglio uno:

  • utilizzando stringhe di controllare contro ; oppure
  • riducendo il proprio input a un numero intero (utilizzando qualcosa come Integer.parseInt(str,10)) in modo che non ci siano differenze tra 04 e 4.
+0

@assylias, sì, hai ragione, ho cambiato i valori ottali in modo che abbiano tutti uno zero iniziale. Colpa mia. – paxdiablo

0

dystroy è giusto, li memorizza come stringhe in un array String[] e poi li analizza per int quando si desidera usarli come numeri interi.

0

Non c'è modo che io sappia che è possibile mantenere quei valori in e int [] array. Usa invece l'array String [] e converti in valori int se necessario.