Java.lang.StringIndexOutOfBoundsException: indice di stringa fuori dall'intervallo: 3
Sto facendo un programma che determina se due parole sono anagrammi l'una dell'altra. Tuttavia, ho il seguente errore e non sono del tutto sicuro del perché:
Java.lang.StringIndexOutOfBoundsException: indice di stringa fuori dall'intervallo: 4
Ho incluso solo questo metodo e non l'intero programma perché questo è il metodo in cui si suppone si verifichi l'errore.
public StringBuffer differentCharacters()
{
StringBuffer difference = new StringBuffer();
for (int i=0; i<StringBuffer1.length(); i++)
{
if(StringBuffer1.charAt(i) != StringBuffer2.charAt(i))
{
difference.append(StringBuffer1.charAt(i));
}
}
return difference;
}
1 answers
Stai ricevendo un StringIndexOutOfBoundsException
perché stai chiamando il StringBuffer2
con un indice illegale. Ecco perché:
Hai 3 StringBuffer
s in generale: differenza, StringBuffer1 & StringBuffer2.
Spiegazione:
StringBuffer difference= new StringBuffer();
Questo è dove si crea il 'risultato' StringBuffer
. Ora immaginiamo per un secondo che:
-
StringBuffer1 ' s
length
è 5 -
StringBuffer2 ' s
length
è 3
Esecuzione:
for (int i = 0; i < StringBuffer1.length(); i++)
In questo ciclo, stai iterando in base alla lunghezza di StringBuffer1 (5). Quindi ecco cosa succede:
io = 0
if(StringBuffer1.charAt(0) != StringBuffer2.charAt(0))
io = 1
if(StringBuffer1.charAt(1) != StringBuffer2.charAt(1))
io = 2
if(StringBuffer1.charAt(2) != StringBuffer2.charAt(2))
io = 3
if(StringBuffer1.charAt(3) != StringBuffer2.charAt(3))
Fermo li'! Ricorda che la lunghezza di StringBuffer2 è uguale a 3 ? il che significa che quanto segue:
StringBuffer2.charAt(3) // 0 based index : 0-1-2-3 crash !!
È illegale. Quindi viene lanciato un StringIndexOutOfBoundsException
e l'esecuzione fallisce.