Prima di tutto, ecco la parte problematica del mio codice; queste sono lezioni di base
public Passenger(String Name, String adress, String number, String password){ count++; accId+=count; this.Name=Name; this.adress=adress; this.number=number; if(checkPw(password)==true){ this.password=password; } } private boolean checkPw(String password){ int length; length = password.length(); if(length != 6){ return false; } else if(password.charAt(0)==0){ return false; } else { for (int i = 0; i < password.length();i++){ if((password.charAt(i))==(password.charAt(i+1))){ return false; } } } return true; }
TestClass:
public static void main(String[] args){ Passenger gokhan=new Passenger("Gokhan","Istanbul","xxx","254651"); System.out.println(gokhan.password); }
Quindi, penso che il problema sia nella class dei Passeggeri. È la mia prima volta che class in class le cose (intendevo la parte if (checkPw (password) == true)). Nella class di test, sembra molto chiaro e non ho mai pensato che questo errore apparisse. Come posso evitare questo messaggio?
Errore completo:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6 at java.lang.String.charAt(String.java:658) at project1.Passenger.checkPw(Passenger.java:45) at project1.Passenger.(Passenger.java:27) at project1.testClass.main(testClass.java:11)
Risultato Java: 1
Il problema è qui:
for (int i = 0; i < password.length();i++){ if((password.charAt(i))==(password.charAt(i+1))){ return false; } }
Quando sei nell'ultima iterazione, stai provando ad accedere al char
nella string
nella posizione i+1
che non esiste.
text ^ | when i = 3 charAt(i) will return t and charAt(i+1) will throw the exception
Questa linea sembra essere il problema:
if((password.charAt(i))==(password.charAt(i+1))){
Quando sull’ultima iterazione del ciclo for
, i
è 5
e i+1
, o 6
, esce dalla fine della stringa, poiché gli indici vanno da 0
a length() - 1
. La soluzione qui è interrompere l’iterazione del ciclo for
dopo il penultimo carattere anziché l’ultimo carattere. Modificare
for (int i = 0; i < password.length();i++){
a
for (int i = 0; i < password.length() - 1; i++){
Quindi il valore massimo che i
nel ciclo for
è 4
, quindi i+1
o 5
non è fuori dalla fine della stringa.