Java 为什么我的代码在几个阶段返回不正确的键?
为什么我在返回的数据中得到了像这样的差别。它在3点前工作正常,然后砰的一声,直到最后都是一团糟。我所做的很简单。我从一个id为name的txt文件中获取值,并将id与另一个名为name的txt文件进行匹配,使其看起来像id,id,如下所示。然而,它并没有像你期望的那样工作。匹配工作正在顺利进行,直到把事情搞砸为止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
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");
}
}