0

我正在为一个班级的“大学书店”编写一个程序。而且我觉得一切都应该正常工作,但是对于 publishingPrice 和标记,我收到“变量未初始化”错误。然而我给了他们两个价值观。我究竟做错了什么?我正在使用 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);



                }
}
4

2 回答 2

2

您只为markupinsideif语句分配一个值。编译器不会跟踪什么是可行的,以及您是否涵盖了所有情况......所以就编译器而言,变量仍然没有被明确分配。

最简单的解决方法是else改用:

if (booksOrdered < 20) {
    markup = .40;
} else if (booksOrdered < 50) {
    markup = .35;
} else if (booksOrdered < 100) {
    markup = .30;     
} else {
    markup = .25;
}

因为 finalelse是无条件的,编译器会发现通过此代码的每条路径都为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改为使用。

于 2013-09-21T20:09:53.713 回答
1

所有变量都必须先用值初始化,然后才能对它们执行算术运算。

于 2013-09-21T20:10:18.550 回答