变量未初始化

时间:2013-09-21 20:06:55

标签: java variables netbeans initialization

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



                }
}

2 个答案:

答案 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)

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