关于调用构造函数和在Java中定义变量的问题(Homework)

时间:2014-09-01 20:55:37

标签: java

要清楚,这是一项积极的家庭作业。我只需要一些指导。

我正在用Java创建一个书店程序,在修订版1中,它只需要在运行时返回有关一本特定书的信息。我必须使用两个类,并在main方法内的辅助类中调用info来输出。

我认为我在Book类中正确创建了构造函数,但是A)定义这些变量的最佳方法是什么?B)调用Bookstore类中的信息来输出?我只是需要一些指导,因为我有点卡住了。 Eclipse要求我将int和double变量重新定义为String,但它们将成为数字......我的语法中是否存在导致它执行此操作的内容?

这是我到目前为止所拥有的:

import java.util.Scanner; // Import Scanner

/** Main Class */
public class Bookstore {

/** Secondary Class */
private class Book {


    /** Declare Variables */
    private int isbn;
    private String bookTitle;
    private String authorName;
    private int yearPublished;
    private String publisherName;
    private double bookPrice;

    /** Constructor */
Book (int isbn, String bookTitle, String authorName, int yearPublished, String publisherName, double bookPrice) {
        setIsbn(isbn);
        setBookTitle(bookTitle);
        setAuthorName(authorName);
        setYearPublished(yearPublished);
        setPublisherName(publisherName);
        setBookPrice(bookPrice);    
    }

    /**
     * @return the isbn
     */
    public void getIsbn(int isbn) {
        return isbn;
    }

    /**
     * @param isbn the isbn to set
     */
    public void setIsbn(int isbn) {
        this.isbn = isbn;
    }

    /**
     * @return the bookTitle
     */
    public void getBookTitle(String bookTitle) {
        return bookTitle;
    }

    /**
     * @param bookTitle the bookTitle to set
     */
    public void setBookTitle(String bookTitle) {
        this.bookTitle = bookTitle;
    }

    /**
     * @return the authorName
     */
    public String getAuthorName() {
        return authorName;
    }

    /**
     * @param authorName the authorName to set
     */
    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }

    /**
     * @return the yearPublished
     */
    public int getYearPublished() {
        return yearPublished;
    }

    /**
     * @param yearPublished the yearPublished to set
     */
    public void setYearPublished(int yearPublished) {
        this.yearPublished = yearPublished;
    }

    /**
     * @return the publisherName
     */
    public String getPublisherName() {
        return publisherName;
    }

    /**
     * @param publisherName the publisherName to set
     */
    public void setPublisherName(String publisherName) {
        this.publisherName = publisherName;
    }

    /**
     * @return the bookPrice
     */
    public double getBookPrice() {
        return bookPrice;
    }

    /**
     * @param bookPrice the bookPrice to set
     */
    public void setBookPrice(double bookPrice) {
        this.bookPrice = bookPrice;
    }

} // End Book Class

/** Main Method */
public static void main(String[] args) {



} // End Main Method

} // End Bookstore Class

那就是我所在的地方。同样,我坚持如何正确定义变量,然后在Bookstore方法中调用数据输出。我知道如何将它打印到屏幕上,只是让它在那里令我感到困惑。我是否在Bookstore类中创建另一个Book对象?

我感谢任何有用的帮助。

1 个答案:

答案 0 :(得分:1)

让我们开始......

private class Book {

我会说将内部类声明为private可能不是最佳选择,因为您无法在BookStore的范围之外使用,但这是您需要的选择使...

此...

/**
 * @return the isbn
 */
public void getIsbn(int isbn) {
    return isbn;
}

在许多帐户上都是错误的。首先,它被声明为void,这意味着该方法不会返回任何内容,但您在方法中使用return isbn。它应声明为返回int

接下来,您将isbn作为参数传递给方法,但会立即返回相同的值,这不是您想要做的事情,您想要返回{{1}的值由isbn定义,例如......

Book

同样适用于/** * @return the isbn */ public int getIsbn() { return isbn; }

在某些语言中,它们通过引用传递参数,这意味着您实际上可以更改方法/函数中的值,并且这些值将反映在调用者上下文中。 Java没有这样做(更准确地说,你不能在方法中重新分配值并将其反映在调用者中)。这是许多开发人员的跳伞点。

基本上,这意味着你不能做......

getBookTitle

由于参数的值在方法调用之后的调用者上下文中与之前相同。你必须得到"得到"来自班级的价值。

一个有趣的副作用是,如果它们提供可变的功能,你可以改变传递给方法的对象的属性......