【发布时间】:2016-10-28 02:53:06
【问题描述】:
我正在尝试为用户输入书籍信息(姓名、作者、出版年份和价格)创建一个程序。然后我希望能够获得 2000 年之后出版的书籍名称及其平均价格的列表。
一开始我想在数组中使用数组,但是在经历了类似的问题后我选择了做一个Book类:
public class Books {
public static String name;
public static String author;
public static int year;
public static float price;
public static float sum = 0.0F;
public static float avrg = 0.0F;
我不知道以下是否有必要,但我这样做了,因为我在很多例子中看到过:
public String getName () {
return name;
}
public String getAuthor () {
return author;
}
public int getYear () {
return year;
}
public float getPrice () {
return price;
}
然后,我尝试获取用户输入并将我的新对象存储在一个数组中。
public static void main(String[] args) {
System.out.println("Please enter details for five books!");
Scanner in = new Scanner (System.in);
Books [] book = new Books[5];
int i = 0;
int j = 0;
int count = 0;
for (i=0; i < book.length; i++) {
System.out.println("Enter Book Title, Author Last Name, Year and Price:");
String name = in.next();
String author = in.next();
int year = in.nextInt();
float price = in.nextFloat();
}
我想在这里找到确切的书籍并计算它们的平均价格:
for (j=0; j<book.length; j++){
if (Books.year >= 2000) {
System.out.println("Books published after 2000:"+ Books.name);
sum = sum + Books.price;
count = count + 1;
}
}
avrg = sum/count;
System.out.println("Average price of books published after 2000:"+avrg);
在我想要出版书名(和平均价格)的那部分之前,一切似乎都进行得很顺利。结果我得到了这个:
Please enter details for five books!
Enter Book Title, Author Last Name, Year and Price:
...
Average price of books published after 2000:NaN
它甚至没有显示名称。我很困惑,我不知道这是否是做我想做的最好的方法。我将不胜感激。
【问题讨论】:
-
“并将我的新对象存储在一个数组中”这在您的代码中没有发生
-
你了解Book类中静态变量的用途吗?提示:你很可能不需要它们是静态的
-
好吧,好吧,我该如何实现呢? @cricket_007 如果它们不是静态的,我会遇到一些错误。这里完全没有头绪。 ://
-
你在哪里声明 sum 变量,如果你声明它,请用 0 初始化它
-
类变量和实例变量有明显的区别。您当前有类变量(所有 Book 实例共享一个价格、作者、名称等)。删除静态变量,您就有了实例变量(每本书都有自己的价格、作者、名称)。总和和平均值不属于 Book 对象的实例。