2013-12-23 2 views
2

Почему я получаю несоответствия в возвращаемых данных. Он отлично работает до 3, затем бум, он доходит до конца. То, что я делаю, просто. Я принимаю значения из txt-файла с идентификатором, именем и сопоставлением идентификаторов с другим 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"); 
     } 

    } 

} 

данных

ids.txt 

0,Triple H 
1,John Cena 
2,Megan Fox 
3,The Undertaker 
4,Pamela Anderson 
5,The Rock 

text.txt

Triple H,John Cena 
John Cena,The Undertaker, 
Triple H,Megan Fox 
The Undertaker,Triple H 
+0

Можете ли вы разместить здесь 2 txt-файла (только первые беспорядочные линии)? – CtrlX

+0

Эй, я сделал. Проверьте изменение. –

+0

Хотя это не решит вашу проблему, помните, что вы можете просто использовать if (vv [0] .equals (value)) вместо того, чтобы делать переменную с именем value1 и проверять, что это значит. – Chronicle

ответ

6

на свой четвертый вход

String value2 = vv[1]; 

vv[1] будет нулевым, поскольку нет никакого значения после первой запятой.

EDIT:

в вашей четвертой записи

The Undertaker,Triple H 

value2 (i.e. Triple H) подобран в first iteration петли на zeroth position, так что печатается с \n, затем entry 3 is matched в 4rd iteration и это напечатано на next line with a comma

вот почему вы получаете выход как

0 
3,0,4 
+0

Проверьте изменения. Спасибо –

+0

@AliGajani проверить изменения – gaurav5430

+0

Как это исправить? Bro. –

1

Похоже, что простым решением было бы удерживать согласованные значения до тех пор, пока цикл 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"); 
    } 
} 
+0

Дает мне ошибку ryknow. Cant конвертировать из int в null. –

+0

Эй, я исправил его, используя две петли –

+0

Моя ошибка. Вы должны использовать Integer или установить его в значение, которое не будет иметь идентификатор для -1. – ryknow

Смежные вопросы