1

さまざまな本のライブラリを作成するプログラムを作成しようとしています。ライブラリ内の各アイテムにコピー数を設定しました。アイテムをチェックアウトするたびに、特定のオブジェクトからのみコピーを 1 つ差し引いてください。チェックアウトしますが、代わりにすべてのオブジェクトからコピーを取得します。問題を解決する方法がわからない。

public abstract class Item{
  private int identify;
  private String title;
  private int copies;

  public Item(){
    identify=0;
    title="N/A";
    copies=0;
  }
  public Item(int id, int copy, String t){
    identify=id;
    copies=copy;
    title=t;
  }
  public void setIdentificationNumber(int id){
    identify = id;
  }
  public void setTitle(String t){
    title=t;
  }
  public void setNumberCopies(int num){
    copies=num;
  }
  public int getIdentificationNumber(){
    return identify;
  }
  public String getTitle(){
    return title;
  }
  public int getNumberCopies(){
    return copies;
  }
  public void checkOut(){
    if(copies>0){
      copies-=1;
      System.out.println("You have checked out "+title+". Thank You");
    }
    else{
      System.out.println("All copies of "+title+" are checked out!");
    }
  }
  public void checkIn(){
    copies+=1;
  }
}

問題は、クライアント メソッドにもある可能性があります。そのためのコードも以下に掲載しました。

import java.util.Arrays;
import java.util.Scanner;
public class Library{
  static String title;
  static String author;
  static int id;
  static int copies;
  static String date;
  static Book[] database = new Book[100];
  static int count=0;

  public static void main(String[] args){
    int i;
    Scanner s = new Scanner(System.in);
    do{
      addBook();
      System.out.println("would you like to add another book?");
      i=s.nextInt();
    }while(i == 0);
    database[0].viewDetails();
    database[1].viewDetails();
    checkingOut();
    database[0].viewDetails();
    database[1].viewDetails();
  }
  public static void addBook(){
    Scanner s = new Scanner(System.in);
    System.out.println("Enter the title of the book you want to add to the collection");
    title=s.nextLine();
    System.out.println("Enter the author of the book you want to add to the collection");
    author=s.nextLine();
    System.out.println("Enter the publishing date of the book you want to add to the collection");
    date=s.nextLine();
    System.out.println("Enter the ID number of the book you want to add to the collection");
    id=s.nextInt();
    System.out.println("Enter the the number of copies that will be added into the collection");
    copies=s.nextInt();

    Book Book1 = new Book(date, author, copies, id, title);
    database[count] = Book1;
    count++;
  }
  public static void checkingOut(){
    boolean found=false;
    int idSearch;
    int i=0;
    Scanner s = new Scanner(System.in);
    System.out.println("Enter the ID number of the book you want to check out");
    idSearch=s.nextInt();
    while(i<database.length && found!=true){
      if(database[i].getIdentificationNumber() == idSearch){
        found = true;
      }
      i++;
    }
    if(found==true){
      database[i].checkOut();
      System.out.println("There are "+database[i].getNumberCopies()+" copies left");
    }
    else{System.out.println("There is no book with that ID number!");}
  }
}

私の addBook メソッドでは、新しい本を作成するたびに book1 という新しいオブジェクトを作成するので、本を追加するたびにすべての本オブジェクトが変更される可能性があると思います。メソッドを書くためのより良い方法が本当にわかりません。

ここにも本の私の方法があります

public class Book extends WrittenItem{
  public Book(){
    super();
  }
  public Book(String date, String a, int copy, int id, String t){
    super(a, date, copy, id, t);

  }
  public void viewDetails(){
    System.out.println("ID: "+getIdentificationNumber()+"\nTitle: "+getTitle()+"\nAuthor: "+getAuthor()+" Date written: "+getDate()+"\nCopies available: "+getNumberCopies());
  }
}

どんな助けでも大歓迎です。

4

2 に答える 2

0

あなたの本がこのようなものであれば、

public class Book extends Item {

    private String date;
    private String author;

    public Book() {
    }

    public Book(String date, String author, int copies, int id, String title) {
        super(id, copies, title);
        this.author = author;
        this.date = date;
    }

    void viewDetails() {
        System.out.println("date:" + date + " author:" + author + " copies:" + getNumberCopies() + " id:" + getIdentificationNumber() + " title:" + getTitle());
    }
}

私がテストしたように、メソッドにブレークも追加すると、コードは正常に動作するはずです。checkingOut()

public static void checkingOut() {
        boolean found = false;
        int idSearch;
        int i = 0;
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the ID number of the book you want to check out");
        idSearch = s.nextInt();
        while (i < database.length && found != true) {
            if (database[i].getIdentificationNumber() == idSearch) {
                found = true;
                break; //add this
            }
            i++;
        }
        if (found == true) {
            database[i].checkOut();
            System.out.println("There are " + database[i].getNumberCopies() + " copies left");
        } else {
            System.out.println("There is no book with that ID number!");
        }
    }
于 2013-11-03T21:19:12.367 に答える