И / или в Java - PullRequest
       47

И / или в Java

0 голосов
/ 30 апреля 2018

у меня возникла проблема в Java-упражнении вопрос говорит Программа завершится, когда сумма четных будет> = 50 или сумма нечетных будет> = 49.

так что при решении я попытался использовать

while (sumeven < 50 || sumodd < 49 )

и это не сработало вообще, но когда я проверил решение, они используют

while (evensum <= 50 && oddsum<=49)

и это сработало (дали те же ответы, что и при выполнении примера)

Итак, мой вопрос: я неправильно понял? или вопрос какой-то неправильной дано. спасибо за ваше время

обновление:

код:

package sample2;
import java.util.Scanner;

public class Sample2 {

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

        System.out.println("enter the initial value");
        int sumeven=0;
        int sumodd=0;
        int num;
        int initial;
        int div5and2=0;
        initial=scan.nextInt();
        if (initial<=0)
            System.out.println("the number must be strictly positive");
        else{
            if (initial%2==0)
                sumeven=initial;
            else
                sumodd=initial;

            System.out.println("start entering your numbers");
            num=scan.nextInt();
            if (num<=0)
                System.out.println("the number must be strictly positive");
            else{
                while(sumeven<=50||sumodd<=49 )
                {
                    if (num%2==0)
                        sumeven=sumeven+num;
                    else 
                        sumodd=sumodd+num;
                    if (num%5==0 &&num%2==0)
                        div5and2=div5and2+1;

                    num=scan.nextInt();
                    while(num<=0)
                    {
                        System.out.println("the number must be strictly positive");
                        num=scan.nextInt();
                    }
                }

                System.out.println("the sum of even numbers: "+sumeven);
                System.out.println("the sum of odd numbers: "+sumodd);
                System.out.println("the number of integers divided by 2 and 5: "+div5and2);
            }
        }
    }
}

Ответы [ 7 ]

0 голосов
/ 30 апреля 2018

логическая логика 101:

!(A || B) == !A && !B обратите внимание на && .

По сути, если вы смотрите на состояние, в котором либо A, либо B , и хотите принять комплимент, вы должны закодировать его как , а не A или B , что, очевидно, ни A, ни B или не A и не B .

0 голосов
/ 30 апреля 2018

AIM - Программа завершится, когда сумма четных будет> = 50 или сумма нечетных будет> = 49.

Следовательно, while (sumeven < 50 || sumodd < 49 ) не будет работать, так как программа завершится, когда сумма четных чисел <50 или сумма нечетных чисел <49, что не является ожидаемым поведением. </p>

Таким образом, мы должны цикл до

  1. Сумма четных меньше или равна 50
  2. Сумма нечетных меньше или равна 49

Общий набор условий должен быть истинным, только если выполняются все условия, поэтому мы используем оператор && с двумя условиями.

0 голосов
/ 30 апреля 2018

while (sumeven <50 || sumodd <49) </p>

В этом случае программа не завершилась, если sumeven <50 ИЛИ sumodd <49. То есть программа завершится, когда sumeven> = 50 AND sumodd> = 50.

0 голосов
/ 30 апреля 2018

Вы хотите, чтобы программа заканчивалась, когда «сумма четных>> 50 или сумма нечетных> = 49».

Итак, нужно что-то вроде (в коде psuedo):

while (Not( the sum of even is >= 50 or the sum of odd is >= 49))

Законы Де Моргана говорят нам, что нам нужно not каждой части снять скобки и переключаться между and и or:

while (Not( the sum of even is >= 50) and Not( or the sum of odd is >= 49))

Давайте попробуем несколько примеров. Если четная сумма равна 50, а нечетная сумма равна 40, вы хотите остановиться. Если вы проверите

while (sumeven < 50 || sumodd < 49 )

вы будете продолжать, поскольку sumeven < 50 ложно, но sumodd < 49 верно.

Проверка обеих частей:

while (evensum <= 50 && oddsum<=49)

работает.

0 голосов
/ 30 апреля 2018

Когда вы отрицаете утверждение,> = становится <и <= становится>. Точно так же И становится ИЛИ, И ИЛИ становится И. Здесь ваше условие остановки - even >= 50 OR odd >= 49, отрицание этого (что требуется для продолжения) - even<50 AND odd<49.

0 голосов
/ 30 апреля 2018

Это базовая булева алгебра.

«Противоположностью» or является and, поэтому, если вы хотите остановить , когда

"even >= 50 or odd >= 49"

Вы должны продолжить на противоположном, то есть

"even < 50 and odd < 49".
0 голосов
/ 30 апреля 2018

while(sumeven<50||sumodd<49 ) означает, что программа будет запускаться при sumeven<50 или sumodd<49, что означает, что она выйдет при sumeven>=50 и sumodd>=49.

...