Sprawdzenie wyniku i zastosowanie boolean

0

Witam, zacząłem naukę programowania i utknąłem przy pisaniu programu z jednego z ćwiczeń.
Chodzi o stworzenie kalkulatora, gdzie po wpisaniu dwóch liczb i odpowiedniej komendy otrzymujemy wynik.
Próbowałem dodać do tego funkcję która sprawdza, czy wynik jest liczbą parzystą. Próbowałem zrobić to przy pomocy boolean, niestety bez skutku.
Jeżeli to możliwe, to proszę też o nakierowanie w jaki sposób mógłbym program usprawnić/poprawić. Pozdrawiam.

import java.util.Scanner;

public class Switch {
    public static void main(String[] args) {

        while(true) {

            System.out.println("Podaj pierwsza liczbe");
            Scanner skan1 = new Scanner(System.in);
            double liczba1 = skan1.nextDouble();

            System.out.println("Podaj druga liczbe");
            Scanner skan2 = new Scanner(System.in);
            double liczba2 = skan2.nextDouble();

            System.out.println("Wybierz dzialanie");
            Scanner skan3 = new Scanner(System.in);
            String dzialanie = skan3.nextLine();

            // boolean wynik1 = suma % 2 == 0; //To probowalem zastosowac
            // boolean wynik2 = roznica % 2 == 0;
            // boolean wynik3 = iloraz % 2==0;

            //System.out.println(wynik1);
            //System.out.println(wynik2);
            //System.out.println(wynik3);

            switch (dzialanie) {

        case "suma":
            double suma = liczba1 + liczba2;
            System.out.println(suma);

            break;

        case "roznica":
            double roznica = liczba1 * liczba2;
            System.out.println(roznica);

            break;

        case "iloraz":
            double iloraz = liczba1 / liczba2;
            System.out.println(iloraz);

            break;

    }

}

    }

}
0

Zmienne suma, różnica i iloraz deklarujesz później niż próbujesz ich użyć. Wyobraź sobie jak działa ten program, przecież przy wprowadzeniu pierwszego zestawu danych masz tylko jeden wynik, a próbujesz działać na trzech - jak one maja się policzyć?

Najpierw policz wynik, a potem sprawdź parzystość.

0

@Charles_Ray: To wkleiłem niefortunnie, program odpalałem w ten sposób:

import java.util.Scanner;

public class Switch {
    public static void main(String[] args) {

        while(true) {

            System.out.println("Podaj pierwsza liczbe");
            Scanner skan1 = new Scanner(System.in);
            double liczba1 = skan1.nextDouble();

            System.out.println("Podaj druga liczbe");
            Scanner skan2 = new Scanner(System.in);
            double liczba2 = skan2.nextDouble();

            System.out.println("Wybierz dzialanie");
            Scanner skan3 = new Scanner(System.in);
            String dzialanie = skan3.nextLine();

            // boolean wynik1 = suma % 2 == 0;
            // boolean wynik2 = roznica % 2 == 0;
            // boolean wynik3 = iloraz % 2==0;

            //System.out.println(wynik1);
            //System.out.println(wynik2);
            //System.out.println(wynik3);

            switch (dzialanie) {

        case "suma":
            double suma = liczba1 + liczba2;
            System.out.println(suma);

            break;

        case "roznica":
            double roznica = liczba1 * liczba2;
            System.out.println(roznica);

            break;

        case "iloraz":
            double iloraz = liczba1 / liczba2;
            System.out.println(iloraz);

            break;

    }
            boolean wynik1 = suma % 2 == 0;
            boolean wynik2 = roznica % 2 == 0;
            boolean wynik3 = iloraz % 2==0;

            System.out.println(wynik1);
            System.out.println(wynik2);
            System.out.println(wynik3);

}

    }

}
0

W jaki sposób się to odpala? Bo to co wkleiłeś nawet się nie kompiluje, używasz zmiennych które nie istnieją w kodzie który wkleiłeś, mowa o suma roznica iloraz

0

@Shure: Przepraszam, źle się wyraziłem. Problem jest właśnie przy kompilacji i dokładnie, dostaję komunikat o braku tych zmiennych. Co, jeżeli znajdują się one w switch?

0
case "suma":
    double suma = liczba1 + liczba2;
    System.out.println(suma);
    break;

Zmienna double suma ma zasięg lokalny, tzn. poza tym blokiem case po prostu nie istnieje. Tak więc musisz stworzyć zmienną poza switchem i uzupełnić jej wartość wewnątrz danego case

0

Wielkie dzięki! Takiej odpowiedzi oczekiwałem, wiem przynajmniej jaki temat mam do przerobienia.
A co z samym programem, da się coś oprócz tego poprawić?

Mała poprawka:

import java.util.Scanner;

public class Kalkulator {
    public static void main(String[] args)
    {

        int suma=0;
        int roznica=0;
        int iloraz=0;

        while(true){

            System.out.println("Podaj pierwsza liczbe");
            Scanner skan1 = new Scanner(System.in);
            int liczba1 = skan1.nextInt();

            System.out.println("Podaj druga liczbe");
            Scanner skan2 = new Scanner(System.in);
            int liczba2 = skan2.nextInt();

            System.out.println("Wybierz dzialanie");
            Scanner skan3 = new Scanner(System.in);
            String dzialanie = skan3.nextLine();

            switch (dzialanie) {

                case "suma":
                    suma = liczba1 + liczba2;
                    System.out.println(suma);
                    boolean wynik1 = suma % 2 == 0;
                    if(wynik1==true){
                        System.out.println("wynik jest parzysty");
                    }
                    else{
                        System.out.println("Wynik jest nieparzysty");
                    }
                    break;

                case "roznica":
                    roznica = liczba1 * liczba2;
                    System.out.println(roznica);
                    boolean wynik2 = roznica % 2 == 0;
                    if(wynik2==true){
                        System.out.println("wynik jest parzysty");
                    }
                    else{
                        System.out.println("Wynik jest nieparzysty");
                    }
                    break;

                case "iloraz":
                    iloraz = liczba1 / liczba2;
                    System.out.println(iloraz);
                    boolean wynik3 = iloraz % 2==0;
                    if(wynik3==true){
                        System.out.println("wynik jest parzysty");
                    }
                    else{
                        System.out.println("Wynik jest nieparzysty");
                    }
                    break;

            }

        }

    }

}
0
  • nie potrzebujesz 3 zmiennych suma roznica ilocznyn , możesz zrobić jedną zmienną result (przy okazji zacznij używać angielskich nazw)
  • nie potrzebujesz za każdym razem tworzyć nowej instancji Scanner, stwórz go raz i reużyj
  • dodatkowo tworzysz Scanner wewnątrz while, czyli przy każdej iteracji nowy. Czemu nie stworzyć go wcześniej, tak jak zmienne które trzymają wyniki?
        boolean wynik1 = suma % 2 == 0;
        if (wynik1 == true) {
            System.out.println("wynik jest parzysty");
        } else {
            System.out.println("Wynik jest nieparzysty");
        }    

możesz wtedy uprościć do

        if (result % 2 == 0) {
            System.out.println("wynik jest parzysty");
        } else {
            System.out.println("Wynik jest nieparzysty");
        }

Poza tym,

  • co z dzieleniem przez 0?
  • co gdy ktoś poda nieznane działanie, np. iloczyn?
  • jak zakończyć działanie programu poza zabiciem procesu?
  • result % 2 == 0 można zamknąć w osobnej funkcji, a nawet można wprowadzić podział odpowiedzialności na funkcję która wykonuje działanie i inną, która sprawdza wynik tego działania, czy jest parzysty czy nie

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0