Професионална програма
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 9 Точки

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

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 9 Точки

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

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

Здравей,

Преработих малко кода ти и го тествах в 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