2010-10-16 10 views
7
System.out.print("Enter an integer: "); 
Scanner sc = new Scanner(System.in); 

int x = sc.nextInt(); 
int lArray = x - 2; 
int[] newArray = new int[lArray]; 

System.out.println("Let's display all possible integers..."); 
for (int i = 0; i <= newArray.length; i++) { 
    newArray[i] = i + 2; 
    System.out.print(newArray[i] + " "); 
} 

Ho appena avviato Java di recente, ma sono sicuro che se avessi programmato un codice simile in un'altra lingua, avrei affrontato lo stesso problema. Questo è un estratto da un'applicazione in cui vengono elencati tutti i numeri primi fino all'input dell'utente.Java: l'indice di array fuori dai limiti Eccezione

Il motivo per cui x-2 viene utilizzato come definizione di lArray è perché la lunghezza dell'array sarà costituita da tutti gli interi da 2 fino al numero {2, 3, 4, 5 ... x}.

ho notato che per la linea

for (int i = 0; i <= newArray.length; i++) { 

se cambio i <= newArray-, il codice funziona senza errori. Tuttavia, l'input dell'utente, x, è escluso, il che è un problema se x è primo.

risposta

6

Si dovrebbe usare < e non <= in:

for (int i = 0; i <= newArray.length; i++) 
        ^^ 

Se foo qualsiasi array, indice valido di foo sono [0,foo.length-1]

Utilizzando foo.length come indice causerà ArrayIndexOutofBoundsException.

E anche lArray che contiene il numero dei numeri naturali <=x ma esclusi soltanto uno numero 1, il suo valore dovrebbe essere x-1 e non x-2.

5

Cambiare la lunghezza dell'array su (x - 1) invece e andare con la condizione <, che è già stata rilevata è necessaria per evitare l'eccezione dei fuori limite.

Il motivo per cui è necessario un array di 1 elemento più grande di quello attualmente in uso è perché ci sono (n - 1) candidati che devono essere considerati tra 2 e n, non (n - 2).

Ad esempio, ci sono due candidati minori o uguali a tre (2 e 3), entrambi i quali, per coincidenza, risultano essere primi.

+0

+1 per tenere conto di entrambi i problemi –

1

è necessario utilizzare:

int lArray = x - 1; 

e cambiare la sua condizione di utilizzare al posto di <<=.

In Java come in C/C++, gli array sono basati su ZERO. Pertanto, la serie di valori N passerà dall'indice a 0 a N-1.

Prendendo il tuo esempio: {2, 3, 4, 5... x}.

Avrete bisogno dei valori N-1 per memorizzare tutti i numeri positivi ma in un array intero.Quindi, se N uguale a , l'array sarà:

newArray[0] = 2; 
newArray[1] = 3; 
newArray[2] = 4; 

Quindi, un array di lunghezza deve essere (N-1).

3
for (int i = 0; i <= newArray.length; i++) //should be <, not <= 
for (int i = 0; i < newArray.length; i++) 
Problemi correlati