can´比较器,我找不到这段代码的错误

balp4ylt  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(429)

我有一个类,它在jframe中实现了comparator方法,由于某种原因,当您将相同的名称放入程序falls的两倍并打印-->stringindexoutofboundsexception时
方法代码:

public class OrdenarCrecienteTecnico implements Comparator<Tecnico> {

    @Override
    public int compare(Tecnico a, Tecnico b) {
        String PalabraA = a.getNombre().toUpperCase();
        String PalabraB = b.getNombre().toUpperCase();
        int i = 0;
    while(i<PalabraA.length() && i<PalabraB.length() && PalabraA.charAt(i) == PalabraB.charAt(i)){    
        i++;
    }
    return PalabraA.charAt(i) - PalabraB.charAt(i);
}

}

xbp102n0

xbp102n01#

这个代码,当面对相同的字符串时,

while(i<PalabraA.length() && i<PalabraB.length() && PalabraA.charAt(i) == PalabraB.charAt(i)){    
    i++;
}

会从循环中消失 i 等于字符串的长度。然后执行以下操作:

return PalabraA.charAt(i) - PalabraB.charAt(i);

这保证会抛出一个越界异常,因为有效索引的长度从0到1。

acruukt9

acruukt92#

另一个答案描述了您的具体问题和解决方案。
你好像工作太辛苦了。简单地让两个字符串进行比较。

public class OrdenarCrecienteTecnico implements Comparator<Tecnico> {

    @Override
    public int compare(Tecnico a, Tecnico b) {
        if( Objects.isNull( a ) || Objects.isNull( b ) ) { return -1 ; }
        return a.getNombre().compareToIgnoreCase( a.getNombre() ) ;

}

相关问题