Не мога да го разбера - моля помогнете ми.
Здравейте,
написах задача от PB на java която работи но не съвсем. Имам проблем с секцита която оказва дали отговора на задачата е четно или нечетно число. Проблема е в действието УМНОЖЕНИЕ. Някой умножения са верни но повечето не са.
Например 5 * 5 % 2 го дава "even" въпреки, че остатъка е 1-ца и е зададено да изписва "odd". Този проблем го има само в това действие. В събиране и изваждане няма проблем. Дали знаете какво става?
ето и задачата:
import java.util.Scanner; public class Task10 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double n1 = Double.parseDouble(scanner.nextLine()); double n2 = Double.parseDouble(scanner.nextLine()); String operator = scanner.nextLine(); String oddOrEven = ""; double result = 0; if(operator.equals("+")){ result = n1 + n2; }else if(operator.equals("-")) { result = n1 - n2; }else if(operator.equals("*")){ result = n1 * n2; }else if (operator.equals("/") && n2 != 0) { result = n1 / n2; }else if (operator.equals("%") && n2 !=0) { result = n1 % n2; } if ((n1 + n2) % 2 == 0) { oddOrEven = "even"; } else if ((n1 + n2) % 2 == 1) { oddOrEven = "odd"; } else if ((n1 * n2) % 2 == 0) { oddOrEven = "even"; } else if ((n1 * n2) % 2 == 1) { oddOrEven = "odd"; } else if ((n1 - n2) % 2 == 0) { oddOrEven = "even"; }else if (( n1- n2) % 2 == 1){ oddOrEven = "odd"; } if (operator.equals("+")) { System.out.printf("%.0f + %.0f = %.0f - %s", n1, n2, result, oddOrEven); }else if (operator.equals("-")){ System.out.printf("%.0f - %.0f = %.0f - %s", n1, n2, result, oddOrEven); }else if (operator.equals("*")) { System.out.printf("%.0f * %.0f = %.0f - %s", n1, n2, result, oddOrEven); }else if (operator.equals("/") && n2 == 0) { System.out.printf("Cannot divide %.0f by zero", n1); }else if (operator.equals("%") && n2 == 0){ System.out.printf("Cannot divide %.0f by zero", n1); }else if (operator.equals("/")) { System.out.printf("%.0f / %.0f = %.2f", n1, n2, result); }else if (operator.equals("%")) { System.out.printf("%.0f %% %.0f = %.0f", n1, n2, result); } } }
Благодаря предварително за помощта и информацията.
Поздрави,
Александър
здравей, благодаря за отговора. Не разбрах обаче каква е връзката между проверка n1+n2 и проверка n1*n2.. Не трябва ли при подаване на " * " в конзолата от потребителя, програмата да влиза в първия if да връща true на n1*n2, след което да отива във втората проверкаа и да връща true на n1*n2 % 2 == 1; при подадени от потребителя n1=5 и n2=5:
Ще дебъгна но тук проблема ми е с логиката като цяло. Бъркам някъде генерално. Защо проблема е само в умножението а не и в другите действия?
Нека разгледаме примера с n1 = 5 и n2 = 5. Първата проверка правилно проверява знака и задава стойността на result. След това програмата отива във втората проверка и влиза във първият if, който върне true. Т.е. в този случай, програмата ще влезе в
(n1 + n2) % 2 == 0, защото условието (5 + 5) % 2 == 0 е вярно, но в контекста на задача е грешно. Щом е влязла в даден if, всички else след него не се проверяват, все едно не съществуват.
Разгледай по-обстойно как работят условните конструкции, мисля че ще ти бъде от полза