2013-10-29 67 views
1

首先,这里是我的代码有问题的部分;这些都是很基本的类Java - StringIndexOutOfBoundsException

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); 
} 

所以,我认为这个问题是在客运班。这是我第一次在课堂上讲课(我的意思是if(checkPw(password)== true)部分)。在测试课上,它看起来非常清晰,我从未想过会出现这个错误。我怎样才能避免这个消息?

完整的错误:

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.<init>(Passenger.java:27) 
    at project1.testClass.main(testClass.java:11) 

Java结果:1

回答

5

的问题是在这里:

for (int i = 0; i < password.length();i++){ 
    if((password.charAt(i))==(password.charAt(i+1))){ 
     return false; 
    } 
} 

当你在最后一次迭代的时候,你要访问charstring的位置i+1不存在。

text 
    ^
     | 
when i = 3 charAt(i) will return t and charAt(i+1) will throw the exception 
2

此行似乎是这个问题:

if((password.charAt(i))==(password.charAt(i+1))){ 

当在for循环的最后一次迭代,i5i+1,或6,熄灭了字符串的结尾,因为指数范围从0length() - 1。此处的解决方案是在倒数第二个字符而不是最后一个字符后停止for循环迭代。更改

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

for (int i = 0; i < password.length() - 1; i++){ 

这样的最大值i已在for循环是4,所以i+15不脱字符串的结尾。

相关问题