我正在为一堂课为“大学书店”写一个程序。我觉得一切都应该工作,但是对于发布价格和标记,我得到一个“变量未初始化”错误。然而我给了他们两个价值观。我究竟做错了什么?我正在使用Netbeans。
import java.util.Scanner;
public class ProgrammingProject {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
//Set my variables for the program
double publisherPrice;
double newBook;
double usedBook;
double usedBookDiscount;
double rentalBook;
double rentalBookDiscount;
double markup;
int booksOrdered;
String bookName;
System.out.println("Enter the Book Title: ");
bookName = keyboard.next();
System.out.println("Enter the Amount of Books Ordered: ");
booksOrdered = keyboard.nextInt();
//Set the conditions for markup
if (booksOrdered < 20) {
markup = .40;
}
if (booksOrdered >= 20 && booksOrdered < 50){
markup = .35;
}
if (booksOrdered >= 50 && booksOrdered < 100){
markup = .30;
}
if (booksOrdered >=100){
markup = .25;
}
//Set calculations for program to use
usedBookDiscount = .75;
rentalBookDiscount = .40;
newBook = (publisherPrice + markup);
usedBook = ((newBook * usedBookDiscount) - usedBookDiscount);
rentalBook = ((newBook * rentalBookDiscount - rentalBookDiscount));
System.out.println(bookName + publisherPrice + newBook + usedBook + rentalBook);
}
}
答案 0 :(得分:2)
您只能在markup
语句中为if
分配值。编译器没有跟踪什么是可行的,以及你是否已经涵盖了所有情况......因此,就编译器而言,变量仍然没有明确分配。
最简单的解决方法是改为使用else
:
if (booksOrdered < 20) {
markup = .40;
} else if (booksOrdered < 50) {
markup = .35;
} else if (booksOrdered < 100) {
markup = .30;
} else {
markup = .25;
}
因为最终的else
是无条件的,编译器会发现通过此代码的每条路径都会为markup
分配一个值。
这对于markup
来说已足够了 - 但您尚未指定任何可为publisherPrice
指定值的内容。这是否意味着通过更多用户输入设置?请注意,如果在声明点为变量赋值,而不是在方法开头声明所有内容然后分配值,则更容易发现所有这些。
例如,而不是:
String bookName;
System.out.println("Enter the Book Title: ");
bookName = keyboard.next();
......你可以:
System.out.println("Enter the Book Title: ");
String bookName = keyboard.next();
另一方面,您通常不应将double
用于财务金额 - 请考虑改为使用BigDecimal
。
答案 1 :(得分:1)
所有变量必须先用值初始化,然后才能对它们进行算术运算。