2013-03-09 3 views
-1

Я пытаюсь проверить, существует ли объект в связанном списке, и выполнить действие в зависимости от того, существует ли оно или нет, однако java обрабатывает все объекты как разные независимо от того, что я делаю. Основной код приведен ниже, и я уверен, что ошибка в логике содержится в этом коде. Статьи и классы клиентов являются стандартными. Переменная флага, которая должна быть истинна, если список содержит статью с заголовком, всегда является ложным. Любая помощь приветствуется.сравнение объектов Java

import java.util.*; 
import java.io.*; 

public class Proj1 { 
public static void main(String[] args) throws FileNotFoundException { 

    LinkedList<Article> Articles = new LinkedList<Article>(); 
    LinkedList<Customer> Customers = new LinkedList<Customer>(); 
    ListIterator<Customer> it = Customers.listIterator(); 
    int id = 0; 
    String command = ""; 

    if (args.length == 0 || args[0] == null) { 
     System.out.println("Please give a valid command file"); 
    } else { 
     try { 
      Scanner reader = new Scanner(new FileInputStream(args[0])); 

      while (reader.hasNext()) { 
       String arg = reader.nextLine(); 
       arg.split(" "); 
       String[] commands = arg.split("\\s+"); 

       if (isInt(commands[0])) { 
        id = Integer.parseInt(commands[0]); 
        command = commands[1]; 
        Customer temp = new Customer(id); 
        if (Customers.size() == 0) { 
         Customers.add(temp); 
        } else { 
         boolean flag = false; 
         for (int i = 0; i < Customers.size(); i++) { 
          if (id == Customers.get(i).getId()) { 
           flag = true; 
          } 
         } 
         if (flag == false) { 
          Customers.add(temp); 
         } 
        } 
       } else { 
        command = commands[0]; 
       } 
       // System.out.println(id+" "+command); 
       if (command.equalsIgnoreCase("borrow")) { 
        String title = ""; 
        int x = commands.length; 
        boolean flag = false; 
        for (int j = 2; j < x; j++) { 
         title += commands[j] + " "; 
        } 
        Article Article = new Article(title); 
        System.out.println(Articles.size()); 
        if (Articles.size() == 0) { 
         Articles.add(Article); 
        } else { 

         for (int i = 0; i < Articles.size(); i++) { 
          if (Article.getTitle() == Articles.get(i).getTitle()) { 
           flag = true; 
          } 
         } 
         if (flag == false) { 
          Articles.add(Article); 
         } 
        } 

        System.out.println(flag); 
        for (int i = 0; i < Customers.size(); i++) { 
         if (Customers.get(i).CustomerList().contains(title) && flag == true) { 
          Article.addToQ(Customers.get(i)); 

         } else { 
          Customers.get(i).CustomerBorrow(Article); 

         } 

        } 

        // System.out.println(title); 
       } else if (command.equalsIgnoreCase("return")) { 
        String title = ""; 
        int x = commands.length; 
        for (int j = 2; j < x; j++) { 
         title += commands[j] + " "; 
        } 
        Article Article = new Article(title); 
        if (Articles.size() == 0) { 
         Articles.add(Article); 
        } else { 
         boolean flag = false; 
         for (int i = 0; i < Articles.size(); i++) { 
          if (title == Articles.get(i).getTitle()) { 
           flag = true; 
          } 
         } 
         if (flag == false) { 
          Articles.add(Article); 
         } 
        } 
        for (int i = 0; i < Customers.size(); i++) { 
         if (id == Customers.get(i).getId()) { 
          Customers.get(i).CustomerReturn(Article); 
         } 
        } 
        // System.out.println(title); 
       } else if (command.equalsIgnoreCase("list")) { 
        for (int i = 0; i < Customers.size(); i++) { 
         if (id == Customers.get(i).getId()) { 
          System.out.println("Customer " + id 
            + " currently has: " 
            + Customers.get(i).CustomerList()); 
         } 
        } 
       } else if (command.equalsIgnoreCase("whohas")) { 
        String title = ""; 
        int x = commands.length; 
        for (int i = 1; i < x; i++) { 
         title += commands[i] + " "; 
        } 
        boolean flag = false; 
        int tempId = 0; 
        for (int i = 0; i < Customers.size(); i++) { 
         tempId = Customers.get(i).getId(); 
         if (Customers.get(i).CustomerList().contains(title)) { 
          flag = true; 
          tempId = Customers.get(i).getId(); 
         } 
        } 
        if (flag = true) { 
         System.out.println(tempId + " currently has " 
           + title); 
        } else { 
         System.out 
           .println("Currently no one has checked out " 
             + title); 
        } 

        // System.out.println(title); 
       } else if (command.equalsIgnoreCase("waitlist")) { 
        String title = ""; 
        int x = commands.length; 
        for (int i = 1; i < x; i++) { 
         title += commands[i] + " "; 
        } 
        for (int i = 0; i < Customers.size(); i++) { 
         if (Customers.get(i).CustomerList().contains(title)) { 
          Articles.get(i).printQ(); 

         } 
        } 
        // System.out.println(title); 
       } else if (command.equalsIgnoreCase("listCustomers")) { 
        System.out.println("Customers include: "); 
        for (int i = 0; i < Customers.size(); i++) { 
         System.out.println(Customers.get(i).getId()); 
        } 


       } else { 
        System.out.println("Command not recognized"); 
       } 

      } 

      reader.close(); 
     } 

     catch (Exception e) { 
      System.out.println("command not formatted correctly"); 
     } 
    } 

} 

public static boolean isInt(String string) { 
    try { 
     Integer.parseInt(string); 

    } catch (NumberFormatException nfe) { 
     return false; 
    } 
    return true; 
} 

} 

команды, такие как

29 одолжить "Нью-Йорк Таймс"

29 заимствуют "Нью-Йорк Таймс"

позволяют дубликаты, и я стараюсь, чтобы избежать этого. Благодарю.

+0

Вам нужно очистить много кода, как 'Article.getTitle() == Articles.get (i) .getTitle() '(предполагается, что' getTitle() 'возвращает' String'). Вы должны использовать '.equals()'. Кроме того, 'if (flag == false)' можно заменить на 'if (! Flag)'. –

ответ

2

Может быть,

if (Article.getTitle() == Articles.get(i).getTitle()) { 

намерен сравнивать строки? Это объясняет, почему ваш флаг всегда возвращается к ошибке. Для сравнения строк в Java вы должны использовать equals (или equalsIgnoreCase для регистронезависимого сравнения)

if (Article.getTitle().equals(Articles.get(i).getTitle()) { 

Больше справочной информация here

+0

все было, спасибо. я работаю неполный рабочий день, делая php, и это заставляет меня пропускать простые мелочи, такие как это намного чаще, очень ценится. – kqualters

1

Я только гадать, но я бы поспорить, что вы либо не переопределяют equals и hashCode в ваших Customer и Article классов или вы не сделали это правильно.

Джошуа Блох показывает вам, как в главе 3 «Эффективная Ява».

Я также задаюсь вопросом, почему вы не выбрали структуру данных Set, если дубликаты не были разрешены.

+0

это для задания, которое требует использования списков, или я бы сделал – kqualters

+0

Тогда помните мой первый комментарий. – duffymo

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