书店计划

时间:2017-02-20 02:36:30

标签: java arrays constructor

我正在编写一个带有数据类和可执行类的书店类型程序。我的问题是,当我显示所有6本书的数组时,它会显示同一本书的6行。我不确定我做错了什么。

以下是给出的说明:

  

课程测试书

     

这个类需要一个main方法和另外两个方法。

     

主要:

     
      
  • 创建一个能够容纳六个Book对象的数组。
  •   
  • 使用参数化构造函数指定此数组的前四个元素中的数据
  •   
  • 使用no-arg构造函数在数组中创建剩余的两本书。
  •   
  • 使用foreach循环处理数组,以显示此时的数组。
  •   
  • 使用数组作为唯一参数调用finishArray()方法。
  •   
  • 以数组作为唯一参数调用reduceBooks()方法。
  •   
  • 重复上述步骤4所需的代码。
  •   
  • 在折扣后显示最贵的书。
  •   
     

在finishArray()中:

     
      
  • 这是一种无效方法。
  •   
  • 使用setter方法指定数组中最后两本书的所有字段中的数据。
  •   
     

在reduceBooks()中:

     
      
  • 此方法返回Book实例。
  •   
  • 使用循环(任何类型)将阵列中每本书的价格降低40%。
  •   
  • 确定折扣后最贵的书并将此书归还给主。
  •   

这是我的代码:

package week6.yedkois;


public class TestBook {
        private static String _title;
        private static String _author;
        private static int _pages;
    private static double _price;

    public TestBook(String title, String author, int pages, int price){
        this._title = title;
        this._author = author;
        this._pages = pages;
        this._price = price;

    }

    public static void main(String[] args){

        Book[] books = new Book[6];

        Book book1 = new Book("Java Programming", "Liang", 1320, 149.99);
        Book book2 = new Book("Rainbow Six", "Tom Clancy", 350, 10.99);
        Book book3 = new Book("Tangerine", "Bloor", 180, 8.99);
        Book book4 = new Book("End of Watch", "King", 320, 21.42);
        Book book5 = new Book();
        Book book6 = new Book();


        books[0] = book1;
        books[1] = book2;
        books[2] = book3;
        books[3] = book4;
        books[4] = book5;
        books[5] = book6;

        for (Book u : books)
            System.out.print(u);


    }

    public TestBook(){
        Book[] books = new Book[6];
        Book book5 = new Book("House", "House", 1320, 89);
        Book book6 = new Book("Car", "Car", 1320, 89);



    }   

    public static double reduceBooks(Book[] books){


        return 0;

    }

    void finishArray(){
    Book newbook = new Book();
    newbook.setTitle(_title);
    newbook.setAuthor(_author);
    newbook.setPages(_pages);
    newbook.setPrice(_price);

    }   
}

这是数据类

package week6.yedkois;

public class Book {

    private static String _title;
    private static String _author;
    private static int _pages;
    private static double _price;
    public static int numBooks = 0;
    public  Book(){
        for (int i = 0; i > 6; i++)
            numBooks++;

    }

    public Book(String title, String author, int pages, double price)
    {   super();
        this._title = title;
        this._author = author;
        this._pages = pages;
        this._price = price;
    }

    public String getTitle()

    {
        return _title;
    }

    public void setTitle(String title)

    {
        this._title = title;
    }

    public String getAuthor()

    {
        return _author;
    }

    public void setAuthor(String author)

    {
        this._author = author;
    }

    public int getPages()

    {
        return _pages;
    }

    public void setPages(int pages)

    {
        this._pages = pages;
    }

    public double getPrice()

    {
        return _price;
    }

    public void setPrice(double price)

    {
        this._price = price;

    }

    public String toString()
    {
        return "Book [Title: " + _title + ", Author: " + _author + ", Pages: " + _pages + ", Price: $" + _price +"]\n";
    }
}

1 个答案:

答案 0 :(得分:0)

您的问题是,您将实例变量设置为图书类

中的静态变量
public class Book {

    private static String _title;
    private static String _author;
    private static int _pages;
    private static double _price;

    public static int numBooks = 0;

一个静态变量,将在您课堂书的所有实例之间共享。因此,在您当前的代码之后,每次创建新实例时,您都将替换其值并使其可用于所有实例。

要解决您的问题,只需删除这些局部变量上的静态字,就可以了。

public class Book {

    private String _title;
    private String _author;
    private int _pages;
    private double _price;

    public int numBooks = 0;