Prosty program wpada w pętlę

0

Witam. Jestem początkującym, może nie koderem, ale "programistą" Javy tak. Chciałem się wyrwać z szablonów książki i stworzyć coś własnego i stworzyłem... kalkulator. Problem jest taki, że wyświetla on pierwszy tekst, mamy możliwość wpisania znaków iii... i znowu mamy możliwość wpisania znaków i tak w kółko. Nie zwracajcie uwagi na brak hermetyzacji, kupe błędów, kiepskich i wolnych rozwiązań, bo do tego mi służy książka. Zamieszczam kod wszystkich 3 klas, tak na wszelki wypadek :) Z góry dzięki za pomoc.

public class KlasaGlowna{
    public static void main (String[] args){
        Liczba[] abc = new Liczba[100];
        DaneWejsciowe A = new DaneWejsciowe();
        System.out.println("Witaj, tan program to prosty kalkulator. Podaj liczbe: ");
        String liczba = A.pobierzDaneWejsciowe();
        int liczbaPierwsza = Integer.parseInt(liczba);
        while (1 == 1){
            int x = 0;
            String znakDzialania = A.pobierzDaneWejsciowe();
            boolean xd = false;
            while (xd = false){
            if (znakDzialania == "+"){
                System.out.println("Podaj liczbe: ");
                String liczbaa = A.pobierzDaneWejsciowe();
                int liczbaDruga = Integer.parseInt(liczbaa);
                abc[0].wartoscPierwsza = liczbaPierwsza + liczbaDruga;
                System.out.println("Wynik to: " + abc[0].wartoscPierwsza);
                abc[0].wartoscEnta = abc[0].wartoscPierwsza;
                xd = true;
                break;
            }
            if (znakDzialania == "-"){
                System.out.println("Podaj liczbe: ");
                String liczbaa = A.pobierzDaneWejsciowe();
                int liczbaDruga = Integer.parseInt(liczbaa);
                abc[0].wartoscPierwsza = liczbaPierwsza - liczbaDruga;
                System.out.println("Wynik to: " + abc[0].wartoscPierwsza);
                abc[0].wartoscEnta = abc[0].wartoscPierwsza;
                xd = true;
                break;
            }
            if (znakDzialania == "*"){
                System.out.println("Podaj liczbe: ");
                String liczbaa = A.pobierzDaneWejsciowe();
                int liczbaDruga = Integer.parseInt(liczbaa);
                abc[0].wartoscPierwsza = liczbaPierwsza * liczbaDruga;
                System.out.println("Wynik to: " + abc[0].wartoscPierwsza);
                abc[0].wartoscEnta = abc[0].wartoscPierwsza;
                xd = true;
                break;
            }
            if (znakDzialania == "/"){
                System.out.println("Podaj liczbe: ");
                String liczbaa = A.pobierzDaneWejsciowe();
                int liczbaDruga = Integer.parseInt(liczbaa);
                abc[0].wartoscPierwsza = liczbaPierwsza / liczbaDruga;
                System.out.println("Wynik to: " + abc[0].wartoscPierwsza);
                abc[0].wartoscEnta = abc[0].wartoscPierwsza;
                xd = true;
                break;
            }
            else{
                System.out.println("Przepraszamy, zły znak");
            }
            }
            while (x > 0){
                if (znakDzialania == "+"){
                     System.out.println("Podaj liczbe: ");
                     String liczbaaa = A.pobierzDaneWejsciowe();
                     abc[x].wartoscEnta = Integer.parseInt(liczbaaa);
                     abc[x].wartoscWynikowa = abc[x].wartoscEnta + abc[x -1].wartoscEnta;
                     System.out.println("Wynik to: " + abc[x].wartoscWynikowa);
                     break;
                }
                if (znakDzialania == "-"){
                     System.out.println("Podaj liczbe: ");
                     String liczbaaa = A.pobierzDaneWejsciowe();
                     abc[x].wartoscEnta = Integer.parseInt(liczbaaa);
                     abc[x].wartoscWynikowa = abc[x].wartoscEnta - abc[x -1].wartoscEnta;
                     System.out.println("Wynik to: " + abc[x].wartoscWynikowa);
                     break;
                }
                if (znakDzialania == "*"){
                     System.out.println("Podaj liczbe: ");
                     String liczbaaa = A.pobierzDaneWejsciowe();
                     abc[x].wartoscEnta = Integer.parseInt(liczbaaa);
                     abc[x].wartoscWynikowa = abc[x].wartoscEnta + abc[x -1].wartoscEnta;
                     System.out.println("Wynik to: " + abc[x].wartoscWynikowa);
                     break;
                }
                if (znakDzialania == "/"){
                     System.out.println("Podaj liczbe: ");
                     String liczbaaa = A.pobierzDaneWejsciowe();
                     abc[x].wartoscEnta = Integer.parseInt(liczbaaa);
                     abc[x].wartoscWynikowa = abc[x].wartoscEnta / abc[x -1].wartoscEnta;
                     System.out.println("Wynik to: " + abc[x].wartoscWynikowa);
                     break;
                }
                else{
                System.out.println("Przepraszamy, zły znak");
                }
            }   
        x++;
        }
    }
}

import java.io.*;
public class DaneWejsciowe {
    public String pobierzDaneWejsciowe(){
        String wierszWej = null;
        try{
            BufferedReader sw = new BufferedReader(new InputStreamReader(System.in));
            wierszWej = sw.readLine();
            if (wierszWej.length() == 0) return null;
        }
        catch (IOException e){
            System.out.println("IOException: " + e);
        }
        return wierszWej;
    }
}

class Liczba {
    int wartoscPierwsza = 0;
    int wartoscEnta = 0;
    int wartoscWynikowa = 0;
}
0

To nie ma prawa dobrze działać.
Wskazówka 1: Dodaj "znak" lub jakąś możliwość wyjścia z programu. Np. while(!wejscie.equals("Koniec")){ ... }. W pętli wykonujesz kolejne działania, a kiedy użytkownik wprowadzi napis "Koniec", to program może się np. wyłączać.
Wskazówka 2: Wartość String porównujemy za pomocą metody equals().
Wskazówka 3: Używaj klasy Scanner do czytania wejścia. Przykład:
Scanner sc = new Scanner(System.in);
String napis = sc.next();

0

@allocer mógłbyś szerzej? Naprawdę się dopiero uczę i szczerze mówiąc nie mam pojęcia o czym mówisz :)
@topic może ktoś jeszcze mi to wytłumaczyć? zrobiłem "wyjście" z programu, ale do reszty przydały by się przykładu.

PS. Moda proszę o przeniesienie do działu Newbie, mój błąd, sorki :)

0
int pierwszaLiczba, drugaLiczba;
char znak;
Scanner czytnik = new Scanner(System.in);

System.out.println("Podaj pierwsza liczbe:");
pierwszaLiczba = Integer.parseInt(czytnik.nextLine());

System.out.println("Podaj druga liczbe:");
drugaLiczba = Integer.parseInt(czytnik.nextLine());

System.out.println("Podaj znak:");
znak = czytnik.nextLine().charAt(0); // Bierzemy tylko pierwszy znak

switch (znak)
{
    case '+':
    {
        // dodawanie, wypisanie
        break;
    }
    case '-':
    {
        // odemowanie, wypisanie
        break;
    }
    case '*':
    {
        // mnożenie, wypisanie
        break;
    }
    case '/':
    {
        // dzielenie, wypisanie
        break;
    }
    default: // coś innego niż: + - * /
    {
        System.out.println("Nieznane działanie matematyczne"); 
        break;
    }
}

Sposób jak można to skrócić. W ramach ćwiczeń napisał byś sobie funkcję która przyjmuje trzy argumenty: int pierwszaLiczba, int drugaLiczba, char znak i zwraca wartość działania. No chyba że do funkcji masz jeszcze trochę czasu..

0
Visher napisał(a):

Sposób jak można to skrócić. W ramach ćwiczeń napisał byś sobie funkcję która przyjmuje trzy argumenty: int pierwszaLiczba, int drugaLiczba, char znak i zwraca wartość działania. No chyba że do funkcji masz jeszcze trochę czasu..

Funkcje czyli... metody?

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