Java - StringIndexOutOfBoundsException 异常

标签 java string class oop

<分区>

首先,这是我的代码中有问题的部分;这些都是非常基础的类(class)

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

测试类:

public static void main(String[] args){
    Passenger gokhan=new Passenger("Gokhan","Istanbul","xxx","254651");

    System.out.println(gokhan.password);
}

所以,我认为问题出在 Passenger 类中。这是我第一次上课(我的意思是 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

最佳答案

问题在这里:

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

当你在最后一次迭代时,你试图访问 stringi+1 位置的 char这是不存在的。

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

关于Java - StringIndexOutOfBoundsException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670369/

相关文章:

java - HTTP 基本身份验证 : Tomcat vs Jetty

java - 为什么在 Java 中使用类作为结构的坏习惯?

c++ - 使用 CStdioFile 写入字符串

php - 如何将字符串数组转换为 PHP 中的关联数组?

python - 从列表/数组字典中迭代实例化类的最佳方法是什么?

jquery - 从 css 类获取 Jquery src

java - onClickListener 用于在 popupWindow 之外进行触摸

java - Geotools 可以加载 DEM 吗?

java - 在 Java 中查找素数

c++ - 我正在尝试从类中的 boolean 值返回一个字符串,该字符串一直返回 true