当前位置: 首页 > 知识库问答 >
问题:

线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:3,大小:2

夏兴平
2023-03-14

java仍然有问题:/下面是我对列表的问题:

if(listKey.size() == 1){
        k = listKey.get(0);
}else if(listKey.size() > 1){
        for(int q : listKey){
            if(listKey.get(q) == listKey.size()){
                k = listKey.get(0);
                k1 = listKey.get(1);
            }
            else if(listKey.get(q) == listKey.size() -1 ){
                k = listKey.get(q+1);
                k1 = listKey.get(0);

            }
            else if(listKey.get(q) == key && listKey.get(q) != listKey.size()){
                k = listKey.get(q+1);
                k1 = listKey.get(q+2);

            }
        }


}else if(listKey.size() == 0){
        System.out.println("empty");
    }

这给了我一个错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at com.server.PeerNode.findReplicas(PeerNode.java:222)
at com.server.PeerNode.printMenu(PeerNode.java:154)
at com.server.PeerNode.run(PeerNode.java:99)
at com.server.Main.main(Main.java:64)

我认为我正在正确使用列表以及如何迭代它!当我试图从列表中获取int时,我不会超过列表的大小。提前感谢帮助

Here is my idea: I got a key = 5 

case 1: array {4}... i just want to put 4 into k
case 2: array {4,6}.. i just to want to put k=6 and k1=4
case 3: array {4,6,7}.. i just want to put k=6 and k1=7

我知道我的代码被弄乱了。。。还有一些错误。多亏了休,我修好了,现在可以工作了。。。现在是这样的:

    if(listKey.size() == 1){
        keyreplica1 = listKey.get(0);

    }else if(listKey.size() > 1){
        listKey.add(key);
        Collections.sort(listKey);
        for (int q=0; q<listKey.size(); q++){
            if(listKey.get(q) == key && listKey.get(q) == listKey.size()){
                keyreplica1 = listKey.get(0);
                keyreplica2 = listKey.get(1);

            }
            else if(listKey.get(q) == key && listKey.get(q) == listKey.size() -1 ){
                keyreplica1 = listKey.get(q+1);
                keyreplica2 = listKey.get(0);

            }
            else if(listKey.get(q) == key && listKey.get(q) != listKey.size()){
                keyreplica1 = listKey.get(q+1);
                keyreplica2 = listKey.get(q+2);

            }
        }

    }else if(listKey.size() == 0){

    }

共有1个答案

岳玉书
2023-03-14

listKey是整数列表吗?我认为你在这里混淆了键和值——如果你的列表有一个以上的条目,你循环它的值v,尝试获得列表中的第v个值。例如,如果listKey是{3,4},这将尝试查找列表中的第三个值,这将超过其边界。

我认为使用下面的循环会给你带来你期望的行为:

for (int q=0; q<listKeys.size(); q++){
 类似资料: