0

これは少し複雑かもしれませんが、説明するために最善を尽くします

まず、CDList クラスを配置させてください

* MAIN: *これがメイン プログラムが私に求めていることです。メイン プログラムは、CDList の機能をテストすることです。追加する 5 つの呼び出しをハードコーディングすると、add() によってユーザーに入力を求めるプロンプトが表示されます。メイン プログラムは、すべての CDlist パブリック メソッドを呼び出し、出力が何を示そうとしているかを明確に説明するラベル付きの出力を生成する必要があります。そして、これは私がこれまでにメインに持っているものです..CDListからのaddメソッドをテストするためだけに...

出力: このプログラムの出力は、完全にキャプチャされたテスト セッションであり、メイン プログラムは「Testing delete:」(または何でも) というラベルを生成し、結果を表示します。結果を採点者に明確にします。1) CDList に 5 枚の CD (妥当なデータがあり、それぞれに少なくとも 3 トラックある) を追加し、2) アーティスト別にデータを並べ替えて表示し、3) タイトルで並べ替えた後にリストを表示し、4) 作成前にリストを表示します。リストからCDの1つを削除した後。完全なクレジットを得るには、出力に明確なラベルを付ける必要があり、CD リストの表示はきちんとしていて読みやすいものにする必要があります。

編集 5: 私の CDList クラス

 package cd;

import java.util.Scanner;

public class CDList {

    public int cdnum;
    private CD[] CDlist;
    private int front, rear;
    //private String artist;      
    //private String title;

    public CDList(int size) {
        CDlist = new CD[size];
        cdnum = 0;
        front = 0;
        rear = size - 1;
    }

   public boolean add() {
        boolean result = false;
        Scanner input = new Scanner(System.in);

        System.out.println("Please enter the Artist name and the CD title: ");
        CD yourCD = new CD(input.nextLine(), input.nextLine());
        System.out.println("Enter the number of songs: ");
        int songNum = input.nextInt();
        System.out.println("Enter the name of the songs: ");

        for (int i = 0; i <= songNum; i++) {
            yourCD.addTrack(input.nextLine());
        }
        CDlist[cdnum] = yourCD;


        if (rear == front) {
            result = false;
        } else {
            if (CDlist[rear] != null) {
                rear--;
            } else {
                CDlist[rear] = yourCD;
            }
            result = true;
        }

        return result;    

    }

    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());
                System.out.println(CDlist[i].getTitle());

                if (deleteInput.nextInt() == 1) {
                    CDlist[i] = null;
                    cdnum--;
                }
            } else {
                System.out.println("CD not found in the list.");
            }
        }


    }

    public void SortArtist() {

        CD temp = new CD(" "," ");
        for (int i = 0; i <= CDlist.length; i++) {
            if (i < CDlist.length-1) {
                if (CDlist[i].getArtist().compareTo(CDlist[i+1].getArtist())<0){
                temp = CDlist[i];
                CDlist[i] = CDlist[i + 1];
                CDlist[i + 1] = temp;
            }
        }
    }
    }

    public void SortTitle() {
        CD temp1 ;
        for (int i = cdnum; i > 0; i--) {
            int x = 0;
            for (int j = 1; j <= i; j++) {
                if (CDlist[i].getTitle().compareTo(CDlist[i+1].getTitle())<0) {
                    x = j;
                }
            }
            temp1 = CDlist[x];
            CDlist[x] = CDlist[i];
            CDlist[i] = temp1;
        }
    }

    public void Display() {
        for (int i = 0; i <= cdnum; i++) {
            while (CDlist[i] == null) {
                i++;
            }
            CDlist[i].display();
        }
    }

    public int size() {
        return cdnum;
    }
}

出力 IM GETTING エラー:

新しい CD を追加しますか アーティスト名と CD タイトルを入力してください: eminem recovery 曲数を入力してください: 3 曲名を入力してください: スペース バウンド 怖くない 愛 嘘をつく方法 アーティスト名と曲名を入力してくださいCD タイトル: マイケル ジャクソン スリラー 曲数を入力してください: 3 曲名を入力してください: ビート イット スリラー ベイビー ビー マイン アーティスト名と CD タイトルを入力してください: ショーン ポール トマホーク テクニック 曲数を入力してください: 3 名前を入力してください曲の数: she doesn't mind put it on you body アーティスト名と CD タイトルを入力してください: Manafest Glory 曲数を入力してください: 3 曲名を入力してください: where are you runaway dreams アーティスト名を入力してくださいCD タイトル: kj-52 コラボレーション 曲数を入力: 3 曲名を入力:親愛なるスリム あなたはなぜどこにいたのですか

スレッド "main" での例外 java.lang.NullPointerException at cd.CDList.SortArtist(CDList.java:86) at cd.Main.main(Main.java:17) Java 結果: 1

これは 86 行目です: if (CDlist[i].getArtist().compareTo(CDlist[i+1].getArtist())<0)

この 17 行目とこの 17 行目: list.SortArtist();


主要

   package cd;

public class Main {

    public static void main(String[] args) {


        System.out.println("Would you like to add a new CD");
        CDList list = new CDList(5);
        for (int i = 0; i < 5; i++) {
            list.add();
        }
        list.SortArtist();
        list.Display();
        list.SortTitle();
        list.Display(); 
        list.delete();
        list.Display();


    }
}

EDIT3: 私の CD クラス

package cd;

公開クラス CD {

private String artist;      //stores artist name
private String title;       //stores CD title
private String track;
private tracklist list;            //tracklist variable

// constructor, sets artist and title, creates tracklist array
public CD(String artistname, String titlename) {
    artist = artistname;
    title = titlename;
    list = new tracklist();

}

public String getArtist() {
    return artist;

}

public String getTitle() {
    return title;
}

// adds a new track, return true if less than 100, flase if no space
public boolean addTrack(String trackinfo) {
    if (list.count < 100) {
        list.add(trackinfo);
        return true;
    } else {
        return false;
    }
}

public int numTracks() {
    return list.count;
}

public void display() {
    System.out.println("Artist:  \t" + artist);
    System.out.println("CD Title: \t" + title);
    list.display(5);
}

}

EDIT4: トラックリスト クラス

    package cd;

public class tracklist {

    public String[] lists;  //array
    private String tNum;
    private String tName;
    int numElements;        // Counter to keep track of the used slots
    int count;              //loop counter

// constructor, creats array for tracks
    public tracklist() {

        numElements = 0;
        lists = new String[100];

    }

// adds tracks to tracklist
    public boolean add(String track) {
        if (numElements < 100) {
            lists[numElements] = track;
            numElements++;
            return true;
        } else {
            System.out.println("The tracklist is full.");
            return false;
        }
    }

//returns the number of elements in array
    public int count() {
        return numElements;
    }

//displays tracklist in required form
    public void display(int indent) {
        tName = "%" + indent + "s";
        tNum = "%" + (indent - 2) + "d";

        System.out.printf(tName, "Track #");
        System.out.println("\t\tSong Title");


        for (count = 0; count < numElements; count++) {
            System.out.printf(tNum, count + 1);
            System.out.println("\t\t" + lists[count]);
        }
    }
}
4

1 に答える 1

0

これは間違っていると思います

 int songNum = input.nextByte();

使用する必要がありますnextInt()

コード内にメイン メソッドまたは静的ブロックが見つかりませんでした。

あなたは彼の add メソッドも呼び出していません

 CD[i]= new CDList(5);

CD[i].add() or  call add() method in the CD constructor

追加

完全な作業コード:

SortArtist を次のように変更します

public void SortArtist() {

    CD temp = new CD(" ", " ");
    for (int i = 0; i <= CDlist.length; i++) {
        if(i<CDlist.length-1){
        if (CDlist[i].getArtist().compareTo(CDlist[i + 1].getArtist()) < 0) {
            temp = CDlist[i];
            CDlist[i] = CDlist[i + 1];
            CDlist[i + 1] = temp;
        }
    }
    }
}

メソッドを追加: :

  public boolean add() {
        boolean result = false;
        Scanner input = new Scanner(System.in);

        System.out.println("Please enter the Artist name and the CD title: ");
        CD yourCD = new CD(input.nextLine(), input.nextLine());
        System.out.println("Enter the number of songs: ");
        int songNum = input.nextByte();
        System.out.println("Enter the name of the songs: ");

        for (int i = 0; i <= songNum; i++) {
            yourCD.addTrack(input.nextLine());
        }
        CDlist[cdnum] = yourCD;


        if (rear == front) {
            result = false;
        } else {
            if (CDlist[rear] != null) {
                rear--;
            } else {
                CDlist[rear] = yourCD;
            }
            result = true;
        }
        return result;    

    }

そして重要なことに

Main.java を変更する

public class Main {

public static void main(String[] args) {


   System.out.println("Would you like to add a new CD");
 CDList list=new CDList(2);  // Two is the No of CDs you can prompt the user to enter by reading the input and pass it to the constructor
    for (int i=0; i < 2 ; i++) {
        list.add();
    }   
    list.SortArtist();
    list.Display();

}

}

期待される出力:

Would you like to add a new CD
Please enter the Artist name and the CD title: 
Ram
Charan
Enter the number of songs: 
1
Enter the name of the songs: 
song1
Please enter the Artist name and the CD title: 
Ram
Racha
Enter the number of songs: 
2
Enter the name of the songs: 
song1
song2
Artist:     Ram
CD Title:   Racha
Track #     Song Title
  1     
  2     song1
  3     song2
于 2013-03-14T05:37:22.027 に答える