Wielokrotne wprowadzanie danych

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

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ć :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.