2013-03-09 171 views
-1

我想检查一个对象是否存在于一个链表中,并根据它是否存在来执行一个动作,但是,无论我做什么,java都将所有对象视为不同。主代码在下面提供,我很确定逻辑中的错误在这个代码中。文章和客户类是非常标准的。如果列表包含具有标题的文章,则标志变量应该为真,但始终为false。任何帮助将非常感激。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)'。 – 2013-03-09 01:59:37

回答

2

难道

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

打算比较字符串?这可以解释为什么你的国旗总会回来。为了比较在Java中,你应该使用equals(或equalsIgnoreCase为不区分大小写的比较)字符串

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

更多的背景信息here

+0

这是它,谢谢。我工作兼职做PHP,它让我错过这样简单的小事情更频繁,非常感谢。 – kqualters 2013-03-09 02:07:48

1

我只是猜测,但我敢打赌,你要么没有覆盖的CustomerArticle你没有做正确equalshashCode

Joshua Bloch向您展示了如何在“有效的Java”的第3章。

我也想知道为什么你不选择Set数据结构,如果重复不被允许。

+0

这是一个需要使用列表的任务,或者我会有 – kqualters 2013-03-09 02:07:08

+0

请注意我的第一条评论。 – duffymo 2013-03-09 03:58:47