Java – StringIndexOutOfBoundsException

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.