2013-05-09 12 views
8

Sono nuovo di java e sto ancora imparando, quindi tienilo a mente. Sto provando a scrivere un programma in cui un utente può digitare una parola chiave e la convertirà in numeri e la metterà in una matrice. Il mio problema è che l'array deve continuare a ripetere l'int.Ripetizione di Java Array

Il mio codice è:

String keyword=inputdata.nextLine(); 
int[] key = new int[keyword.length()]; 
for (int k = 0; k < keyword.length(); ++k) 
{ 
    if (keyword.charAt(k) >= 'a' && keyword.charAt(k) <= 'z') 
    { 
     key[k]= (int)keyword.charAt(k) - (int)'a'; 
    } 
} 

In questo momento se cerco di ottenere qualsiasi key[i] superiore al keyword.length esso genera un errore outofbounds. Ho bisogno di essere infinito.

Quindi, fondamentalmente, se keyword.length() erano 3 Ho bisogno di essere in grado di vedere se key[2] è lo stesso di key[5] e key[8] e così via.

Grazie per il vostro aiuto!

+0

non ++ k, ma k + = keyword.length(); – Hydroid

+0

E 'intenzionale, che lasci alcuni elementi in chiave a 0? – hyde

risposta

4

Bene, è più semplice correggere il codice prima con un po 'di refactoring. Estrarre tutti gli usi di keyword.charAt(k) a una variabile locale:

for (int k = 0; k < keyword.length(); ++k) 
{ 
    char c = keyword.charAt(k); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c'a'; 
    } 
} 

Poi siamo in grado di risolvere il problema con il % dell'operatore:

// I assume you actually want a different upper bound? 
for (int k = 0; k < keyword.length(); ++k) 
{ 
    char c = keyword.charAt(k % keyword.length()); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c - 'a'; 
    } 
} 

Questo supponendo effettivamente fare key più di keyword - e probabilmente si desidera cambia anche il limite superiore del ciclo. Ad esempio:

int[] key = new int[1000]; // Or whatever 
for (int k = 0; k < key.length; ++k) 
{ 
    char c = keyword.charAt(k % keyword.length()); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c - 'a'; 
    } 
}