2016-12-10 4 views
1

Это мой метод для проверки, если первые три элемента является одинаковымвсегда возвращают ложь, если сравнить существующую строку из тестового файла в недавно Входящий объект с параметром

carModel является строкой

PurchasePrice является двойной

purchaseDate является дата

Я сохранил их в текстовый файл, разделяя запятой и пробелом, как «»

Однако этот метод всегда возвращает false, даже если я вводил только одну и ту же запись. Но когда я изменил первый «& &» на «||», он вернет true.

public static boolean exist(Car c) { 
    String line = ""; 
    File file = new File("Car Records.txt"); 
    try { 
     BufferedReader fr = new BufferedReader(new FileReader(file)); 
     while ((line = fr.readLine()) != null) { 
      String[] s = line.split(", "); 
      if ((s[0].equals(c.carModel)) &&(s[1].equals(c.purchasePrice))&& (s[2].equals(c.purchaseDate)) 
        && (s[5].equals(false))){ 
       return true; 
      } 
     } 
     fr.close(); 
    } catch (IOException e) { 
     System.out.println("Error reading file"); 
    } 
    return false; 

} 
+1

's [5]. equals (false) '-' String' никогда не будет равным 'boolean'. – Marvin

+0

Возможно, тип данных ваших переменных не является строкой, то есть c.purchasePrice и c.purchaseDate? – Mikkel

+0

Отлаживайте свой код, пожалуйста. – f1sh

ответ

2

s[0], s[1] и s[2] являются String s, поэтому, сравнивая их с double или Date никогда не возвращает истину.

Перед проведением сравнения вам придется разбирать строки ввода в правильный тип.

Вам нужно что-то вроде этого (я не устанавливал Date сравнение, так как я не знаю, как вы представляете дату в входном файле):

 if ((s[0].equals(c.carModel)) &&(Double.parseDouble(s[1])==c.purchasePrice)&& (s[2].equals(c.purchaseDate)) 
       && (s[5].equals("false"))){ 
      return true; 
     }