Loading...
simonses avatar simonses 0 Точки

07. Operations Between Numbers - Programming Basics -JAVA Test #5 (Incorrect answer)

Не мога да разбера защо и какво е грешно в решението ми на посочената. Judge ми дава 90% с грешка: Test #5 (Incorrect answer), но грешката не е показана.

Ето го и кода:

//----------------------------------------------------------------

import java.util.Scanner;

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

        int n1 = Integer.parseInt(scanner.nextLine());
        int n2 = Integer.parseInt(scanner.nextLine());
        char sign = scanner.nextLine().charAt(0);
        int res;

        switch (sign) {
            case '+':
                res = n1 + n2;
                printDefMsg(n1, sign, n2, res, evenOdd(res));
                break;
            case '-':
                res = n1 - n2;
                printDefMsg(n1, sign, n2, res, evenOdd(res));
                break;
            case '*':
                res = n1 * n2;
                printDefMsg(n1, sign, n2, res, evenOdd(res));
                break;
            case '/':
                if (n2 == 0){
                    printZeroMsg(n1);
                }
                else {
                    Double nd1 = n1 * 1.0;
                    Double res1 = nd1 / n2;
                    System.out.printf("%d %c %d = %.2f", n1, sign, n2, res1);
                }
                break;
            case '%':
                if (n2 == 0){
                    printZeroMsg(n1);
                }
                else {
                    res = n1 % n2;
                    System.out.printf("%d %c %d = %d", n1, sign, n2, res);
                }
                break;
            default:
                break;
        }
    }

    private static String evenOdd(int number){
        String evenOrOdd = "even";
        if (number % 2 == 1){
            evenOrOdd = "odd";
        }
        return evenOrOdd;
    }

    private static void printZeroMsg(int n1){
        System.out.printf("Cannot divide %d by zero ", n1);
    }

    private static void printDefMsg(int n1, char sign, int n2, int res, String evenOdd){
        System.out.printf("%d %c %d = %d - %s", n1, sign, n2, res, evenOdd);
    }
}

//---------------------------------------------------------------------------------

 

Ще се радвам ако някой може да ми помогне да го дебъгна.

условие линк:

https://softuni.bg/trainings/resources/officedocument/37449/exercise-problem-descriptions-programming-basics-with-java-january-2019/2211

задача 8

 

 

0
Programming Basics 03/02/2019 19:58:04
medical_boy_sf avatar medical_boy_sf 16 Точки

Ще може ли линк към условието?

0
simonses avatar simonses 0 Точки

пропуснал съм

https://softuni.bg/trainings/resources/officedocument/37449/exercise-problem-descriptions-programming-basics-with-java-january-2019/2211

 

задача 8

0
medical_boy_sf avatar medical_boy_sf 16 Точки

Не открих никаква грешка. Никога не съм се занимавал с Java и моето предположение, че грешката идва от някаква специфика на форматирането с printf функцията, с която не съм запознат. Иначе кода ти го проверих няколко пъти и не открих никаква грешка. Имаш един допълнителен интервал накрая в "Cannot divide {number} by zero", но това не би трябвало да бъде проблем, защото ми е направило впечатление, че Judge "изрязва" интервалите в края на стринговете. И на мен ще ми е любопитно да разбера откъде идва тази грешка.

0
03/02/2019 21:39:09
damesova avatar damesova 203 Точки

Здравей,

Преработих малко кода ти и го тествах в Judge. Даде 100/100.

Основното, което направих е, че ти махнах методите и ти сложих печат във всеки къндишън. А другото, което промених е, че ти направих променливата res на тип double, вместо int.

Дано да ти се е изяснило. Успех.

 

Ето и преработеното ти решение ТУК.

Нарочно ти оставих методите закоментирани, за да виждаш какво промених.

0
simonses avatar simonses 0 Точки

Мерси много мъча го още, но като цяло искам да запазя методите. Промених res to Double, но резултата е същия. Имам чувството, че в случая има проблем в Judge. Както и да е, не е фатално :)

import java.util.Scanner;

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

        int n1 = Integer.parseInt(scanner.nextLine());
        int n2 = Integer.parseInt(scanner.nextLine());
        char sign = scanner.nextLine().charAt(0);
        Double nd1 = n1 * 1.0;
        Double res;

        switch (sign) {
            case '+':
                res = nd1 + n2;
                printDefMsg(n1, sign, n2, res, evenOdd(res));
                break;
            case '-':
                res = nd1 - n2;
                printDefMsg(n1, sign, n2, res, evenOdd(res));
                break;
            case '*':
                res = nd1 * n2;
                printDefMsg(n1, sign, n2, res, evenOdd(res));
                break;
            case '/':
                if (n2 == 0){
                    printZeroMsg(n1);
                }
                else {
                    res = nd1 / n2;
                    System.out.printf("%d %c %d = %.2f", n1, sign, n2, res);
                }
                break;
            case '%':
                if (n2 == 0){
                    printZeroMsg(n1);
                }
                else {
                    res = nd1 % n2;
                    System.out.printf("%d %c %d = %.0f", n1, sign, n2, res);
                }
                break;
            default:
                break;
        }
    }

    private static String evenOdd(Double num){
        String[] splitArr = String.valueOf(num).split("\\.");
        int number = Integer.parseInt(splitArr[0]);

        String evenOrOdd = "even";
        if (number % 2 == 1){
            evenOrOdd = "odd";
        }
        return evenOrOdd;
    }

    private static void printZeroMsg(int n1){
        System.out.printf("Cannot divide %d by zero", n1);
    }

    private static void printDefMsg(int n1, char sign, int n2, Double res, String evenOdd){
        System.out.printf("%d %c %d = %.0f - %s", n1, sign, n2, res, evenOdd);
    }
}
0
dstoianov891 avatar dstoianov891 18 Точки

Хм и аз не мога да открия грешката, но на мен ми дава 100т. Ако искаш разгледай моя код и може да сравниш. Успех! :)

 

https://pastebin.com/3jSJZh1P

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.