Проверка логического значения поля в Java Composition Class - PullRequest
0 голосов
/ 11 июля 2020

У меня возникли проблемы с проверкой логического значения для класса композиции, который содержит несколько логических полей. Если это правда, оператор строки печати будет печататься, но я не уверен, что логическое значение не обнаруживается, что оно было инициализировано при создании объекта в драйвере, или что-то не так с logi c моего кода.

Я все еще изучаю Java и извиняюсь, если у меня довольно много неэффективных вариантов кода, но по большей части программа работает, я просто не могу распечатать Burger rollType после изменяется соответствующий логический тип rolltype. Я даже не уверен, что логическое значение для типа рулона проверяется или правильно устанавливается.

В настоящее время я использую getBreadRoll (). Iswhateverrolltype (), чтобы получить тип рулона из составного класса BreadRoll а затем передать его в логическую переменную соответствующего типа rolltype, затем проверить в условном выражении, чтобы установить строковую переменную rollType на тип ролика, а затем использовать в строке для печати. ​​

Вот код.

Это метод дополнений, который распечатывает выбранные части бургера и цену за единицу.

public String additions() {
    String additions = "The "+getClass().getSimpleName()+" you made consists of a \n";

    boolean isWhiteCH = getBreadRoll().isWhiteRoll();
    boolean isWheatCH = getBreadRoll().isWheatRoll();
    boolean isBrownRyeCH = getBreadRoll().isBrownRyeRoll();
    String rollType="";

    if(isWhiteCH){
       
        rollType = "White Roll";
    }
    else if(isWheatCH){
        
        rollType = "Wheat Roll";
    }
    else if(isBrownRyeCH){
        
        rollType = "Brown Rye Roll";
    }
    boolean isBreadRollCH=getBreadRoll().isBrownRyeRoll() || getBreadRoll().isWheatRoll() || getBreadRoll().isWhiteRoll();
    boolean isMeatCH=isMeat();
    boolean isLettuceCH=isLettuce();
    boolean isTomatoCH=isTomato();
    boolean isCarrotCH=isCarrot();

    for(int i=0; i < getCount(); i++){
        if(isWhiteCH){
            additions += " "+rollType+" at $"+getFbreadRollPrice()+ ", \n";
            isWhiteCH = false;
            continue;
        }else if(isWheatCH){
            additions += rollType+" at $"+getFbreadRollPrice()+ ", \n";
            isWheatCH = false;
            continue;
        }else if(isBrownRyeCH){
            additions += rollType+" at $"+getFbreadRollPrice()+ ", \n";
            isBrownRyeCH = false;
            continue;
        }
        else if(isMeatCH){
            additions +="Meat patty at $"+getFmeatPrice()+ ", \n";
            isMeatCH = false;
            continue;
        }
        else if(isLettuceCH){
            additions +="a piece of lettuce at $"+getFlettucePrice()+", \n";
            isLettuceCH = false;
            continue;
        }
        else if(isTomatoCH){
            additions +="a tomato at $"+getFtomatoPrice()+", \n";
            isTomatoCH = false;
            continue;
        }
        else if(isCarrotCH){
            additions +="some carrots at $"+getFcarrotPrice()+", \n";
            isCarrotCH = false;
            continue;
        }
    }//end for loop

    return additions + "And the final total for the "+getClass().getSimpleName()+" \n" +
            "is $"+getPrice()+".";
}//end additions Method

Вот составной класс BreadRoll, содержащий поля, которые я пытаюсь проверить . Это не дочерний элемент какого-либо из классов, а объект класса BreadRoll, который используется как поле в других классах.

public class BreadRoll {

    private boolean whiteRoll;
    private boolean wheatRoll;
    private boolean brownRyeRoll;

    public BreadRoll(boolean whiteRoll, boolean wheatRoll, boolean brownRyeRoll) {

        if(wheatRoll){
            this.whiteRoll = whiteRoll;
            this.wheatRoll = false;
            this.brownRyeRoll = false;
        }else if(wheatRoll){
            this.whiteRoll = false;
            this.wheatRoll = wheatRoll;
            this.brownRyeRoll = false;
        }else if(brownRyeRoll){
            this.whiteRoll = false;
            this.wheatRoll = false;
            this.brownRyeRoll = brownRyeRoll;
        }
    }//end constructor

Вот поля, которые я ввожу для драйвера и результат.

public static void main(String[] args) {
        Hamburger JaysHam = new Hamburger(new BreadRoll(true, false, false),
                true, true, false, false);

System.out.println(JaysHam.getPrice());
System.out.println(JaysHam.additions());

Вот результат.

5.29
The Burger you made consists of a 
Meat patty at $1.50, 
a piece of lettuce at $0.50, 
And the final total for the Hamburger 
is $5.29.

After the String 'Бургер, который вы сделали, состоит из' типа Roll должен быть напечатан вместе с ценой.

1 Ответ

0 голосов
/ 11 июля 2020

Я только что изменил класс для BreadRoll на перечисление, а затем проверил состояния перечисления для метода дополнений. Это было намного проще, и проблема была решена. Благодарим @Chrylis и @ tgdavies.

Спасибо, ребята

...