Софтуерно Инженерство
Loading...
AnnaIvanova11 avatar AnnaIvanova11 3 Точки

misunderstanding of Boolean result

Здравейте,

Искам да помоля за малко помощ, относно Boolean - ите, опитах се да реша, приложената долу задача с два от тях. Имам решение с обикновенни проверки, но реших да пробвам с Boolean, изчетох каквото си открих в Google, но явно не съм схванала, защото изхода ми е различен, ако някой може да помогне малко.

Код, условие:

1.Номер

Поздравления, поради вашите задълбочени знания в сферата на програмирането МВР реши да наеме точно вас за създаването на новата им система за генериране на специални автомобилни номера. Всеки един специален автомобилен номер се състой от четири числа. Условията, които разграничават специалните от обикновените номера са следните:

  • Ако номерът започва с четна цифра, то той трябва да завършва на нечетна цифра и обратното – ако започва с нечетна,  завършва на четна
  • Първата цифра от номера е по-голяма от последната
  • Сумата от втората и третата цифра трябва да е четно число

Входа се състой от две числа - начало и край на интервал, между които трябва да се генерира всяко едно число от номера.

Вход

  1. Първи ред - едноцифрено число - началото на интервала – цяло число в интервала [1…9]
  2. Втори ред - едноцифрено число - края на интервала – цяло число в интервала [1…9]

Изход

На конзолата трябва да се отпечатат всички специални номера, разделени с интервал.

 

 

При числата 3 и 5 , трябва да изпечати: 4333 4353 4443 4533 4553 5334 5354 5444 5534 5554,а аз имам 


4333 4353 4443 4533 4553 5333 5334 5353 5354 5443 5444 5533 5534 5553 5554


import java.util.Scanner;

//greshno
public class carNumber {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int startNum = Integer.parseInt(scan.nextLine());
        int endNum = Integer.parseInt(scan.nextLine());

        boolean isItEqual = false;
        boolean isItOdd = false;

        for (int i = startNum; i <= endNum; i++) {

            if (i % 2 == 0) {
                isItEqual = true;
            }
            for (int j = startNum; j <= endNum; j++) {
                for (int k = startNum; k <= endNum; k++) {
                    for (int l = startNum; l <= endNum; l++) {
                        if (l % 2 == 1) {
                            isItOdd = true;
                        }
                        boolean flag = (i > l) && (j + k) % 2 == 0;

                        if (!isItEqual && (!isItOdd) && flag) {

                            System.out.printf("%d%d%d%d ", i, j, k, l);

                        }
                        if (isItEqual && isItOdd && flag) {

                            System.out.printf("%d%d%d%d ", i, j, k, l);

                        }
                    }
                }
            }
        }

    }
}

 

Тагове:
0
Programming Basics with Java 26/11/2019 22:40:49
Nikisf avatar Nikisf 72 Точки
Best Answer

Никъде не връщаш булевите на false, като кажеш веднъж, че са true и си седят така. Сложи на проверките за четно/нечетно по една елсе проверка да връща на false и би трябвало да си решиш проблема:

Пример:

if (l % 2 == 1) {
  isItOdd = true;
 }else {
 isItOdd = false;
 }

0
AnnaIvanova11 avatar AnnaIvanova11 3 Точки

Благодаря много! Сега разбрах, защото докато дебъгвах видях, че запазва стойността, бях останала с впечетлението обаче, че трябва да  се върне и да чекне в main метода. Беше ми много полезен отговора ! Мерси !

0