0

私は正常に完了し、プログラムに問題はありません。本の最高価格と最低価格が表示されないことを除いて、すべてが正常に機能します。しかし、私はこのようなプログラムは望んでいません。

現在、プログラムは本の名前で構成される事前定義された配列で構成されています。つまり、ユーザーが本の入力を入力するたびに、プログラムは本の名前と本の価格を表示します。だから、私は別のことを考えています。それは、本の名前と価格を配列に事前に保存しないことです。

書籍のユーザーキー入力の名前が何であれ、その書籍名は価格とともに配列として保存されます。そして、ループは3回になります。つまり、本の名前と価格を1回入力すると、ユーザーは再び本の名前を入力するように求められ、最後に、本の総数と価格が、の最高価格と最低価格とともに表示されます。本、ユーザーが購入しました。

誰かがこれを手伝ってくれますか?以下の私のコーディングを参照してください:

import java.util.Scanner;
public class BookStore {
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        String[] books = {"Introduction To Java","Artificial Intlegence","Web Programming","Introduction To Database","English Speech","Introduction To C#"};

        double[] prices ={100,50,25,45,60,90}; 

        System.out.println("Welcome to SAJID's Book Shop");
        System.out.println();
        System.out.println("Please select the the book and write the number of the book :");
        System.out.println();
        System.out.println("1.Introduction To Java");
        System.out.println("2.Artificial Intlegence");
        System.out.println("3.Web Programming");
        System.out.println("4.Introduction To Database");
        System.out.println("5.English Speech");
        System.out.println("6.Introduction To C#");
        System.out.println();

        System.out.println("Total Number Of Books "+books.length);
        int totalBook;
        totalBook = books.length;

        double totalPrice=0;    
        int i=0;            
        while(i<=5){
            totalPrice+=prices[i];
            i++;
        }

        System.out.println("Total Price:$" + totalPrice);

        int bookTitle;
        System.out.print("Enter book Number: ");
        bookTitle = input.nextInt();

        if(bookTitle == 0){
            System.out.println("Book name: "+books[0]);
            System.out.print("Book price:$"+prices[0]);
            }

        if(bookTitle == 1){

            System.out.println("Book name: "+books[1]);
            System.out.print("Book price:$"+prices[1]);
        }
        if(bookTitle == 2){

            System.out.println("Book name: "+ books[2]);
            System.out.print("Book price:$"+prices[2]);
        }
        if(bookTitle == 3){

            System.out.println("Book name: "+books[3]);
            System.out.print("Book price:$"+prices[3]);
        }
        if(bookTitle == 4){

            System.out.println("Book name: "+books[4]);
            System.out.print("Book price:$"+prices[4]);
        }
        if(bookTitle == 5){

            System.out.println("Book name: "+books[5]);
            System.out.print("Book price:$"+prices[5]);
        }

        /*double min=0;
        for(i=0;i<books.length-1;i++){

            if(books[i] =< books[i++]){
                min=books[i];
                minBook = i;
            }*/
        }

        //System.out.print("Cheapest book: " + min);
    }       
 }
4

4 に答える 4

2

あなたが何を求めているのか誤解している可能性は十分にあります。その場合は、以下のすべてを無視してください。

現在、現在繰り返されている本を次の本と比較しており、forループでiを2回インクリメントしています。これを試して:

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]);

最大値についても同様のことができます。

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]);

もちろん、これはあなたの本のリストが空ではないことを前提としています。

于 2012-06-01T15:41:03.617 に答える
2

動的入力を使用しているため、最終的には任意の数の本が作成される可能性があります。そのため、配列を使用しないでください。サイズは簡単に変更できないため、代わりにArrayListに変更することをお勧めします。

さらに、書籍と価格の配列は密接に関連しているため、この情報を格納するために独自のBookオブジェクトを作成することをお勧めします。例えば:

public class Book {
    String title;
    double price;
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
}

全体を動的にするには、基本的にほとんどのコードを書き直す必要があります。これについては、以下で説明します。ここで宿題をしたかどうかはわかりませんが、宿題をした場合は、コード全体を読んで、その内容を理解することを強くお勧めします。

Scanner input = new Scanner(System.in);
List<Book> books = new ArrayList<Book>();
boolean done = false;

System.out.println("Welcome to SAJID's Book Shop\n");
// Now the user can input some books.
String title;
double price;
while (!done) {
    System.out.println("Enter a book title (nothing to stop): ");
    title = input.nextLine();
    if (title.isEmpty()) {
        // User didn't enter a title, stop this loop.
        done = true;
    }
    else {
        System.out.println("Enter a price: ");
        price = input.nextDouble();
        // Because nextDouble() only reads the next number and doesn't finish the entire line, we have to manually go to the next line.
        input.nextLine(); 
        // Create a new book and add it to our shop.
        Book newBook = new Book(title, price);
        books.add(newBook);
    }
}

System.out.println("The following books are for sale:");
for (int i = 0; i < books.size(); i++) {
    // Remember that the first book in our list is number 0, not 1, so we add 1 to i.
    System.out.println((i + 1) + ". - " + books.get(i).title);
}
System.out.println("Total Number Of Books "+ books.size());

// Now buy some books.
List<Book> purchasedBooks = new ArrayList<Book>();
done = false;
String line;
int bookNumber;
while (!done) {
    System.out.println("Enter the number of a book you'd like to buy (0 to stop): ");
    bookNumber = input.nextInt();
    input.nextLine();
    if (bookNumber == 0) {
        // We stop if the user enters 0.
        done = true;
    }
    else {
        // Remember that the first book in our list is number 0, not 1.
        purchasedBooks.add(books.get(bookNumber - 1));
    }
}

System.out.println("You're buying these books:");
double totalPrice = 0;
for (int i = 0; i < purchasedBooks.size(); i++) {
    // Remember that the first book in our list is number 0, not 1, so we add 1 to i.
    System.out.println((i + 1) + ". - " + purchasedBooks.get(i).price + " - " + purchasedBooks.get(i).title);
    totalPrice += purchasedBooks.get(i).price;
}
System.out.println("Total Number Of Books Bought: " + purchasedBooks.size());
System.out.println("Total Price: " + totalPrice);

// Find the cheapest and the most expensive book.
Book minBook = purchasedBooks.get(0);
Book maxBook = purchasedBooks.get(0);
// Iterate over our books using a foreach loop.
for (Book book : purchasedBooks) {
    if (book.price < minBook.price) {
        minBook = book;
    }
    else if (book.price > maxBook.price) {
        maxBook = book;
    }
}
System.out.println("Cheapest Book: " + minBook.title + " (" + minBook.price + ")");
System.out.println("Most Expensive Book: " + maxBook.title + " (" + maxBook.price + ")");
于 2012-06-01T17:12:19.327 に答える
1

それはおそらくあなたの質問ではありませんが(私は本当に理解していません)、これはコメントするには長すぎます。すべてのifを次のように置き換えることから始めることができます。

if(bookTitle >= 0 && bookTitle <= 5){
    System.out.println("Book name: "+books[bookTitle]);
    System.out.print("Book price:$"+prices[bookTitle]);
}
于 2012-06-01T15:36:22.417 に答える
1

少し遅れて投稿しましたが、どうぞ。私はすべてのthosifステートメントを取り除き、スイッチを使用し、価格配列を並べ替え、ループの一部を変更しました。おっと編集!やばい、やってしまった。あなたは私がしたことである最も安い本の価格ではなく、最も安い本を望んでいました。

        Scanner input = new Scanner(System.in);
    String[] books = {"Introduction To Java","Artificial Intlegence","Web Programming","Introduction To Database","English Speech","Introduction To C#"};

    double[] prices ={100,50,25,45,60,90};

    System.out.println("Welcome to SAJID's Book Shop");
    System.out.println();
    System.out.println("Please select the the book and write the number of the book :");
    System.out.println();
    System.out.println("1.Introduction To Java");
    System.out.println("2.Artificial Intlegence");
    System.out.println("3.Web Programming");
    System.out.println("4.Introduction To Database");
    System.out.println("5.English Speech");
    System.out.println("6.Introduction To C#");
    System.out.println();

    System.out.println("Total Number Of Books "+books.length); 

    double totalPrice=0;
    for(int i = 0; i<=5; i++){
        totalPrice+=prices[i];
    }

    System.out.println("Total Price:$" + totalPrice);

    System.out.print("Enter book Number: ");

    int bookTitle = input.nextInt();
    switch(bookTitle){
      case 1:
        System.out.println("Book name: "+books[0]);
        System.out.println("Book price:$"+prices[0]);
        break;
      case 2:
        System.out.println("Book name: "+books[1]);
        System.out.println("Book price:$"+prices[1]);
        break;
      case 3:
        System.out.println("Book name: "+ books[2]);
        System.out.println("Book price:$"+prices[2]);
        break;
      case 4:
        System.out.println("Book name: "+books[3]);
        System.out.println("Book price:$"+prices[3]);
        break;
      case 5:
        System.out.println("Book name: "+books[4]);
        System.out.println("Book price:$"+prices[4]);
        break;
      default:// since there are only 5 books use #6 as default
        System.out.println("Book name: "+books[5]);
        System.out.println("Book price:$"+prices[5]);
        break;
  }

    // assuming the prices array holds the price of each individual book
    // sort the prices array
    java.util.Arrays.sort(prices);
    System.out.println("Cheapest book: " + prices[0]);
    System.exit(0);

}

于 2012-06-01T16:12:10.757 に答える