-1

割り当ての問題は次のとおりです。

本を追跡するのに役立つ本屋のアプリケーションを作成するように依頼されました。

アプリケーション用に次のクラスを作成する必要があります。

  1. 書籍のタイトルと書籍の価格の属性または変数を正しいデータ型で記述するクラス。
  2. クラスは本のコレクションを格納する必要があります (配列を使用)。このクラスは、コレクション内の本の総数、コレクション内の本の総コストも追跡する必要があります。
  3. [ボーナス マーク] クラスには、最も高価な本のタイトルと価格、および最も安い本のタイトルと価格も表示する必要があります。

要件

本の詳細を格納する配列を実装する必要があります。データベースやファイルを実装する必要はありません。

すべての Java ソース ファイルには、名前、学生 ID、コース、および日付が含まれている必要があります。ソース コードのコメント内 (ヘッダー内) にこの情報を含めます。

各クラスに適切にコメントを付け、コードをチェックする必要があります

本を配列に正常に保存し、表示させました。しかし、本の価格に問題があります。本の名前を出力しますが、購入した本の価格と合計価格は出力しません。以下の私のコーディングを参照してください..

import java.util.Scanner;

public class array_userinput {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        int numOfBook;
        // prompts the user to enter the number of books he/she wants
        System.out.print("How many numbers of books u want: "); 

        double[] bookPrice = new double[numOfBook];
        int num = input.nextInt();
        // double price[];
        double totalCost = 0;
        String array[] = new String[num];

        System.out.print("Enter the " + num + " book names now: ");

        for (int i = 0; i < array.length; i++) {

            array[i] = input.next();

            System.out.println("These are the books you have entered: "
                    + array[i]);
            System.out.print("Please enter book price: ");
            bookPrice[i] = input.nextDouble();
            System.out.println(numOfBook);

            totalCost += bookPrice[i];
            double max = prices[i];
            int maxBook = 0;
            for (int i = 1; i < books.length; i++) {
                if (prices[i] > max) {
                    max = prices[i];
                    maxBook = i;
                }
            }

            System.out.print("Cheapest book: " + books[maxBook]);
            double min = prices[i];
            int minBook = 0;
            for (int i = 1; i < books.length; i++) {
                if (prices[i] < min) {
                    min = prices[i];
                    minBook = i;
                }
            }
            System.out.print("Cheapest book: " + books[minBook]);

        }
    }

}
4

2 に答える 2

4

この割り当ては、「コードを機能させる」演習というよりも、コード設計演習のように思えます。したがって、それを機能させるだけでは効果がありません (良い成績が必要な場合)。

「書籍のタイトルと書籍の価格の属性または変数を正しいデータ型で記述するクラス」. 「クラスは本のコレクションを(配列を使用して)保存する必要があります」、あなたは実際にそれをしているのではなく、すべてをメイン関数内で行っているだけです。

いくつかの単純なクラスを作成するには、OO 設計を少し使用する必要があります (たとえば、Book には、コンストラクターとゲッター メソッドと共に、タイトルと価格が必要です)。その後、それらのインスタンスを配列に格納して問い合わせることができます。最も安価な本の問題では、compareTo を実装し、for(Book book in books) 構造を使用できます。

また、「メイン」で達成しようとしていることの機能分解を検討し、機能をシンプルで読みやすくしてください。

于 2012-06-06T15:37:26.707 に答える
2

これからもっと仕事が必要ですよね?

実装を間違えましたdouble max = prices[i];。このコンテキストでは初期化されていないため、コンパイルしないでください。これを試して:

double min = prices[0];
int minBook = 0;
for(int i = 1; i < books.length; i++) {
    if(prices[i] < min) {
        min = prices[i];
        minBook = i;
    }
}
System.out.print("Cheapest book: " + books[minBook]);

ジェフ ワトキンスの回答も完全に正しいです。宿題に応じて、もっと優れた設計が必要になります。Book オブジェクトに関する彼のアドバイスに従ってください。これはとてもいいです。メインを関数に分割することに関しては、または同様のものを使用する関数をpublic Book minBook(Book[] books)書くことができます。public Book maxBook(Book[] books)aBook.compareTo(Book other)

于 2012-06-06T15:34:34.633 に答える