0

CD を削除するメソッドを作成しようとしています (CD にはアーティスト名、アルバム タイトル、トラック タイトルが含まれます)。 : void delete()は、1) ユーザーにアーティストとタイトルを尋ね、アーティストとタイトルが一致する CD を見つけようとします。2) 見つかった場合は CD を表示するか、見つからなかったとユーザーに伝えます。3)見つかった場合、ユーザーに削除の確認を求め (これにはキーボード入力が必要です)、ユーザーが確認した場合は CD エントリを削除します。

これは私のコードです:

public void delete() {
    Scanner deleteInput = new Scanner(System.in);
    System.out.println("Which artist you would like to delete? ");
    System.out.println("Enter artist name and title to be deleted:");
    String artist = deleteInput.nextLine();
    String title = deleteInput.nextLine();

    for (int i = 0; i <= CDlist.length - 1; i++) {

        if ((CDlist[i].getArtist().equals(artist))
                && (CDlist[i].getTitle().equals(title))) {
            System.out.println("Found: " + CDlist[i].getArtist() + " "
                    + CDlist[i].getTitle());
            if (CDlist[i] == null) {
                continue;
            }

            System.out.println("Would you like to delete it? Yes 0 No 1");                
            if (deleteInput.nextInt() == 1) {
                CDlist[i] = null;
                cdnum--;
            }
        } else {
            System.out.println("CD not found in the list.");
        }
    }

私の問題は、削除する正しいアーティストとタイトルを入力すると、CD が見つからないという出力が表示されることです (ただし、見つかったと表示されてから削除されます)。これを修正するにはどうすればよいですか?

4

1 に答える 1

0

これが私が意味したことです。また、for ループが開始された直後の{最初の部分に余分なものがあります。if問題が発生していないことを願っています。

いくつかのコメントに基づいて、ケースを無視する部分を追加しました。

public void delete() {
    Scanner deleteInput = new Scanner(System.in);
    System.out.println("Which artist you would like to delete? ");
    System.out.println("Enter artist name and title to be deleted:");
    String artist = deleteInput.nextLine();
    String title = deleteInput.nextLine();

    boolean found = false;
    int idx = -1;

    System.err.println("DEBUG: Input Data");
    System.err.println("Artist Name: "+artist+" Length of String: "+artist.length());
    System.err.println("Title: "+artist+" Length of String: "+title.length());
    System.err.println();

    for (int i = 0; i <= CDlist.length - 1; i++) {

        if (CDlist[i]!=null) {
            System.err.println("DEBUG: Checking Index "+i);
            System.err.println("Artist Name: "+CDlist[i].getArtist()+" Length of String: "+CDlist[i].getArtist().length() + " Matches: "+CDlist[i].getArtist().equalsIgnoreCase(artist));
            System.err.println("Title: "+CDlist[i].getTitle()+" Length of String: "+CDlist[i].getTitle().length() + " Matches: "+CDlist[i].getTitle().equalsIgnoreCase(title));
            System.err.println();
        }

        if (CDlist[i]!=null && CDlist[i].getArtist().equalsIgnoreCase(artist) && CDlist[i].getTitle().equalsIgnoreCase(title)) {
            System.out.println("Found: " + CDlist[i].getArtist() + " " + CDlist[i].getTitle());
            found = true;
            idx = i;
                    break;
        }
    }

    if (found) {
        System.out.println("Would you like to delete it? Yes 0 No 1");                
        if (Integer.parseInt(deleteInput.nextLine()) == 1) {
            CDlist[idx] = null;
            //I am assuming cdnum is a variable of the class that can be accessed.
            cdnum--;
        }
    } else {
        System.out.println("CD not found in the list.");
    }
}

注: CDlist[i] を if ステートメントに単独で配置する必要はなく、他のステートメントにマージするだけで済みます。これができるのは、Java が左から右へと物事を見て、何もしようとする前に null をチェックするからです。単独で配置できますが、最初の if ステートメントの前に配置する必要があります。

于 2013-03-14T12:14:48.843 に答える