Wątek przeniesiony 2016-10-23 09:14 z Java przez bogdans.

Wielokrotne wprowadzanie danych

0

Witam
Na szybko, na gorąco..
Załóżmy że mam menu..

Wciśnij 1 - dodaj liczby
Wciśnij 2 - odejmij liczby

Chciałbym by po wybraniu opcji jeden, zrobi się program który odczytuje 2 liczby a następnie je dodaje. (TO JUŻ MAM) Jednak że, chciałbym wpisywać różne liczby non stop ! Aby program je ciągle dodawał, do chwili ! Gdy wpiszę "cofnij" wtedy program ma znów wyświetlić menu

Wciśnij 1 - dodaj liczby
Wciśnij 2 - odejmij liczby

Jeżeli nie podam 1 ani 2 opcji, a napiszę w konsoli "wyjscie" - wówczas chcę by program się wyłączył.

Męczę się i męczę.. Zatem proszę o pomoc. Bo nie wiem :( i nic nie wyślę

0

Pokaż jaki już kod zrobiłeś i jak kombinujesz aby rozwiązać Twój problem.

0

Użyj pętli.
Używaj rozsądnie tagów.

0

Nie jestem teraz na swoim kompie. Ale odbywało się mniej więcej, to tak..

Wpisz exit jeśli wyjść

if (wpisz.equals(exit) {
czytanie.close()
}
próbowałem różne warianty z equals. toString no ale jakoś ........

A 2 sprawa, czyli wpisywanie tak długo jak..
to robiłem z hasnextline - sprawdzanie czy nastepna linia jest, ale nie działa tak jak oczekiwałem
if (hasnext()) {
czytaj.dalej }

próbowałem też

1
package calc;

import java.util.Scanner;

public class Calc {

    public static void main(String[] args){
        String option;
        Scanner sc = new Scanner(System.in);

        do{

            System.out.println("MENU:\n1 - dodawani, 2 - odejmowanie\n"
                + "Aby zakończyć działanie programu wpisz słowo 'wyjscie'");

            option = sc.next();

            switch(option){
                case "1":
                    dodawanie();
                    break;
                case "2":
    //                odejmowanie();
                    break;
                case "wyjscie":
                    break;
                default:
                    System.out.println( "Niepoprawna opcja" );
            }     
        }while(!(option.equals("wyjscie")));
    }

    static void dodawanie(){
        Scanner sc = new Scanner(System.in);

        double wartosc, wynik = 0;
        String temp;

        do{
            temp = sc.next();

            try{
                wartosc = Double.parseDouble(temp);
                wynik+=wartosc;
            }catch(NumberFormatException e){
                if(!temp.equals("cofnij")){
                    System.out.println("Niepoprawny format liczby");
                }
                else{
                    System.out.println("Powrót do menu głównego");
                }
            }

            System.out.println("Suma wynosi: " + wynik);

        }while(!temp.equals("cofnij"));
    }
}

Zobacz czy o coś takiego tobie chodziło? Zrobiłem tylko dla dodawania, odejmowanie sobie sam dodasz.

Sam dopiero się uczę, ale mam nadzieję, że jest w miarę w porządku.

0

Dzięki za kod, wygląda na prawdę ! Wspaniale :) Pozwoliłem sobie co nieco zmienić, jednak dalej powstają pytania...

Tutaj jest kod :
KLASA MAIN

package Calculator_aplication.AplikacjaOkienkowa;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner odczyt = new Scanner(System.in);
        DzialaniaMatematyczne noweDzialanie = new DzialaniaMatematyczne();
        String wybor;

        do {
            System.out.println();
            System.out.println("***Wybierz Mądrze***");
            System.out.println("Dodawanie   - 1");
            System.out.println("Odejmowanie - 2");
            System.out.println("Mnożenie    - 3");
            System.out.println("Zakoncz program - wyjscie");

            wybor = odczyt.nextLine();

            switch (wybor) {
            case "1":
                noweDzialanie.dodawanie();
                break;
            case "wyjscie":
                System.out.println("Do zobaczenia !");
                break;
            default:
                System.out.println("Dokonales zlej opcji");
            }
        } while (!wybor.equals("wyjscie"));
        odczyt.close();
    }
}

KLASA MATEMATYKA


package Calculator_aplication.AplikacjaOkienkowa;

import java.util.Scanner;

public class DzialaniaMatematyczne {
    Scanner liczby = new Scanner(System.in);

    String dod_wartosc1, dod_wartosc2;
    String exit = "cofnij";
    Integer wynik, a, b;

    public void dodawanie() {
        do {
            wynik = 0;
            System.out.println("Podaj pierwszą wartość");
            dod_wartosc1 = liczby.nextLine();
            System.out.println("Dodaj drugą wartość");
            dod_wartosc2 = liczby.nextLine();

            try {
                a = Integer.parseInt(dod_wartosc1.replace(" ", ""));
                b = Integer.parseInt(dod_wartosc2.replace(" ", ""));
                wynik = a + b;

            } catch (NumberFormatException e) {
                if (dod_wartosc1.equalsIgnoreCase(exit)) {
                    break; //System.out.println("Powrót do menu wyborów");
                } else {
                    System.out.println("Blad dozwolony format: Liczby całkowite.");
                }
            } catch (NullPointerException puste) {
                if (dod_wartosc1.isEmpty() && dod_wartosc2.isEmpty()) {
                    System.out.println("Wartości nie mogą być puste");
                }
            }
            System.out.println("Wynik to: " + wynik);
            System.out.println("");

        } while (!dod_wartosc1.equalsIgnoreCase(exit) && (!dod_wartosc2.equalsIgnoreCase(exit)));

    }

    public double odejmowanie(double x, double y) {

        return x - y;
    }

    public double mnozenie(int a, int b) {

        return a * b;
    }

}

A tutaj są pytania :

  • po wpisaniu cofnij, i tak muszę podać drugą wartość, czyli wystarczy kliknąć enter aby program cofnął się do menu, problem jest wtedy gdy wpiszemy cofnij, a w drugiej wartości damy Stringa lub inta - wówczas, oczywiście program cofnie do menu, jednak że nie wyświetli komunikatu - Powrót do menu.
    -- Jak zrobić - aby po wpisaniu "cofnij" gdziekolwiek czy to wartość 1, czy to wartość 2, program natychmiast zakończył obecne działanie i "się" cofnął do menu wyborów. Co rozwiąże problem z brakiem wiadomości, gdy podamy w drugiej wartości jakąś liczbę bądź Stringa.(patrz wyżej)

Wydaje mi się że w ifie gdzie jest break; (zresztą jest nawet syso) z informacją o powrocie. No ale żeby mieć break i zarazem informację to chyba kolejny if muszę zrobić. A to już nie będzie eleganckie

Więcej pytań nie pamiętam, jak tylko sobie przypomnę napiszę w odpowiedzi :)

0

A... Zapomniałem tam usunąć drugi catch - Pewnie zastanawiacie się po co on jest.. No właśnie -
Ponieważ gdy wartości 1 i 2 lub 1 lub tylko 2 będą puste . To ma wyświetlić stosowny komunikat. I do tego też staram się dojść

1

W klasie "DziałaniaMatematyczne" zamień fragment:

        do {
            wynik = 0;
            System.out.println("Podaj pierwszą wartość");
            dod_wartosc1 = liczby.nextLine();
            System.out.println("Dodaj drugą wartość");
            dod_wartosc2 = liczby.nextLine();

            try {
                a = Integer.parseInt(dod_wartosc1.replace(" ", ""));
                b = Integer.parseInt(dod_wartosc2.replace(" ", ""));
                wynik = a + b;

            } catch (NumberFormatException e) {

Na:

        do {

            try {
                wynik = 0;
                System.out.println("Podaj pierwszą wartość");
                dod_wartosc1 = liczby.nextLine();
                if(dod_wartosc1.equals("cofnij"))   break;
                System.out.println("Dodaj drugą wartość");
                dod_wartosc2 = liczby.nextLine();
                if(dod_wartosc2.equals("cofnij"))   break;
                a = Integer.parseInt(dod_wartosc1.replace(" ", ""));
                b = Integer.parseInt(dod_wartosc2.replace(" ", ""));
                wynik = a + b;

            } catch (NumberFormatException e) {
0

Dzięki Łukasz, to takie proste.... Nawiasem mówiąc jaka jest różnica obejmując cały blok TRY (twój kod, a mój) Moim zdaniem gdyby coś padło w moim kodzie to cześć po za TRY zostanie wypisana. A w drugim przypadku nic nie zostanie wyświetlone. Aczkolwiek może to konwencja tak nakazuje. W sumie nie wiem, dlatego warto zapytać :)

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