Ошибка для переменной, которая будет инициализирована, но она уже есть? - PullRequest
0 голосов
/ 14 февраля 2020

У меня проблемы с моим Java кодом. Это еще не закончено, но у меня есть ошибка, сообщающая мне, что переменная disRate не была инициализирована, но была в операторах else if.

Это дополнительная кредитная программа для вступления до Java класса; это алгоритм для расчета окончательной цены товара со скидкой на основе количества и цены, введенных пользователем.

import java.util.Scanner;


public class DiscountDemo {

    public static void main(String[] args) {
        // start code here

        //variables
        int quantity;
        double itemPrice, totalCost, disRate, disCost, netAmount;

        Scanner get = new Scanner(System.in);

        //user prompt
        System.out.print("Enter the quantity of an item: --> ");
        quantity = get.nextInt();

        System.out.print("Enter the price of an item: --> ");
        itemPrice = get.nextInt();

        //decision statements
        if(quantity <= 0 || itemPrice <=0)
        {
            System.out.println("\nInvalid Data!\n");

        }
        else if(quantity <= 9)
        {
            disRate = 0;

        }//if quantity <=9 end
        else if(quantity >= 10 && quantity <= 19)
        {
            disRate = .1;

        }//if quantity >=10 || <= 19 end
        else if(quantity >= 20 && quantity <= 49)
        {
            disRate = .2;

        }//if quantity >=20 || <= 49 end
        else if(quantity >= 50 && quantity <=99)
        {
            disRate = .3;

        }//if quantity >=50 || <= 99 end
        else if(quantity >= 100)
        {
            disRate = .35;

        }//if quantity >=100 end

        //calculation
        totalCost = quantity * itemPrice;
        disCost = totalCost * disRate;
        netAmount = itemPrice - disCost;


    } //main end

} //class end

Ответы [ 2 ]

4 голосов
/ 14 февраля 2020

Проблема в том, что вы инициализируете disRate только в операторе IF, и если все логические условия имеют значение false, disRate никогда не будет инициализирован, и математика для disCost = totalCost * disRate; не может быть выполнена.

IDE обнаруживает эту ситуацию и просит вас инициализировать disRate значением.

Просто введите double disRate = 0; в начале кода или добавьте оператор else для инициализации disRate.

0 голосов
/ 14 февраля 2020

Вы только что объявили это, не инициализировали. У вас нет else, просто есть if-elseif, конечно, что когда значение больше или равно 100, оно будет введено в последний if-else, но компилятор не может быть настолько умнее.

    } else if(quantity >= 50 && quantity <=99){
        disRate = .3;

    }else  {
        disRate = .35;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...