Java 为什么我的代码在几个阶段返回不正确的键?

Java 为什么我的代码在几个阶段返回不正确的键?,java,Java,为什么我在返回的数据中得到了像这样的差别。它在3点前工作正常,然后砰的一声,直到最后都是一团糟。我所做的很简单。我从一个id为name的txt文件中获取值,并将id与另一个名为name的txt文件进行匹配,使其看起来像id,id,如下所示。然而,它并没有像你期望的那样工作。匹配工作正在顺利进行,直到把事情搞砸为止 0,1 1,3 0,2 0 3,0,4 2 3,0 4,2 4,1 2, while ((output2 = br2.readLine()) != null) { S

为什么我在返回的数据中得到了像这样的差别。它在3点前工作正常,然后砰的一声,直到最后都是一团糟。我所做的很简单。我从一个id为name的txt文件中获取值,并将id与另一个名为name的txt文件进行匹配,使其看起来像id,id,如下所示。然而,它并没有像你期望的那样工作。匹配工作正在顺利进行,直到把事情搞砸为止

0,1
1,3
0,2
0
3,0,4
2
3,0
4,2
4,1
2,




while ((output2 = br2.readLine()) != null) {

    String[] vv = output2.split(",");
    String value1 = vv[0];
    String value2 = vv[1];

    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        int key = entry.getKey();
        String value = entry.getValue();
                                    //System.out.println(key+","+value);

        if ((value1.equals(value))) {
            System.out.print(key + ",");

        }

        if ((value2.equals(value))) {
            System.out.print(key + "\n");
        }

    }

}
text.txt

Triple H,John Cena
John Cena,The Undertaker,
Triple H,Megan Fox
The Undertaker,Triple H
在你第四次参赛时

String value2 = vv[1];
vv[1]
将为空,因为第一个逗号后没有值

编辑:

在你的第四个条目中

The Undertaker,Triple H
值2(即三重H)
在循环的
第一次迭代
的第零个位置中匹配,因此它用
\n
打印, 然后在
4次迭代中匹配
条目3
,并在
下一行用逗号打印

这就是为什么你会得到这样的输出

0
3,0,4

似乎一个简单的解决方案是将匹配的值保留到for循环之后

while ((output2 = br2.readLine()) != null) {
    String[] vv = output2.split(",");
    String value1 = vv[0];
    String value2 = vv[1];
    int key1 = -1;
    int key2 = -1;

    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        int key = entry.getKey();
        String value = entry.getValue();
                                    //System.out.println(key+","+value);

        if ((value1.equals(value))) {
            key1 = key;
        }

        if ((value2.equals(value))) {
            key2 = key;
        }

    }
    if (key1 != -1 && key2 != -1) {
        System.out.println(key1 + ", " + key2 + "\n");
    }
}
while((output2=br2.readLine())!=null){
字符串[]vv=output2.split(“,”);
字符串值1=vv[0];
字符串值2=vv[1];
int键1=-1;
int键2=-1;
对于(Map.Entry:Map.entrySet()){
int key=entry.getKey();
字符串值=entry.getValue();
//System.out.println(键+“,”+值);
如果((值1.等于(值))){
键1=键;
}
如果((值2.等于(值))){
键2=键;
}
}
如果(键1!=-1和键2!=-1){
System.out.println(key1+“,“+key2+”\n”);
}
}

你能把2个txt文件放在这里吗(只是第一行乱码)?嘿,我放了。检查编辑。虽然这不会解决您的问题,但请记住,您可以只使用if(vv[0].equals(value)),而不是使用名为value1的变量并检查其相等值。有没有办法不使用两个if,也许可以解决问题?您始终需要先检查value1,然后在发现它时重置循环并检查value2,你可以在两个独立的循环中轻松地完成它,首先是值1,然后是值2,或者按照@ryknow在他的回答中的建议做一些事情。我用两个for循环修复了它。@AliGajani cool,既然你已经得到了答案,请将其中一个答案(我的或ryknow)标记为正确答案,以供将来的观众使用。你做到了吗,别忘了对我的问题投赞成票,这样别人可能会觉得有用。谢谢:)嘿,我用我的两个错误纠正了它。您必须使用Integer,或者将其设置为没有id的值,如-1。
while ((output2 = br2.readLine()) != null) {
    String[] vv = output2.split(",");
    String value1 = vv[0];
    String value2 = vv[1];
    int key1 = -1;
    int key2 = -1;

    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        int key = entry.getKey();
        String value = entry.getValue();
                                    //System.out.println(key+","+value);

        if ((value1.equals(value))) {
            key1 = key;
        }

        if ((value2.equals(value))) {
            key2 = key;
        }

    }
    if (key1 != -1 && key2 != -1) {
        System.out.println(key1 + ", " + key2 + "\n");
    }
}