-1

リンクリスト内にオブジェクトが存在するかどうかを確認し、存在するかどうかに応じてアクションを実行しようとしていますが、Javaは、何をしてもすべてのオブジェクトを異なるものとして扱います。メインコードを以下に示します。ロジックのエラーはこのコードにあると確信しています。記事と顧客クラスは非常に標準的です。リストにタイトルのある記事が含まれている場合にtrueと見なされるフラグ変数は、常にfalseです。どんな助けでも大歓迎です。

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「ニューヨークタイムズ」を借りる

重複を許可し、私はこれを避けようとしています。ありがとう。

4

2 に答える 2

2

それでしょうか

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

文字列を比較するつもりですか?それはあなたの旗が常に偽に戻る理由を説明するでしょう。Javaで文字列を比較するには、equals(またはequalsIgnoreCase大文字と小文字を区別しない比較に)使用する必要があります

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

詳細な背景情報はこちら

于 2013-03-09T01:59:45.200 に答える
1

私は推測しているだけですが、あなたがオーバーライドequalsしなかった、クラスでオーバーライドしなかったか、正しく実行しなかったに違いありません。hashCodeCustomerArticle

Joshua Blochは、「EffectiveJava」の第3章でその方法を示しています。

Setまた、重複が許可されていないのに、なぜデータ構造を選択しなかったのか疑問に思います。

于 2013-03-09T01:54:00.240 に答える