Problem ze skanowaniem danych do kalkulatora.

0

Witam, oto treść zadania którę usiłuje napisać:

Napisz kalkulator interpretujący wpisany tekst, tzn. użytkownik wpisuje liczby naturalne od -999 do 999, następnie znak mnożenia, dzielenia, dodawania lub odejmowania i znowu cyfry -999 do 999. Program drukuje wynik, a użytkownik wpisuje następne działanie. Zabezpiecz się przed największą możliwą ilością błędów użytkownika. Tekst END kończy wpisywanie danych.

Mój kod:

package kalkulator;

import java.util.*;

/**
 * Kalkulator
 */
public class Main
{
	
	static Scanner in = new Scanner(System.in);
	
	public static void main(String[] args)
	{
		int a = 0, b = 0, wynik = 0;
		char znak = 0;
		a = readInt();
		while(true)
		{
			if(wynik != 0)
				a = wynik;
			znak = readChar();
			b = readInt();
			if(b == 1000)
				break;
			wynik = calculate(a, znak, b);
			System.out.println("Wynik to: " + wynik);
		}
	}
	
	/**
	 * Metoda czytająca liczbę
	 */
	public static int readInt()
	{
		System.out.print("Podaj liczbę: ");
		String buffer = in.next();
		if(buffer.equals("END"))
			return 1000;
		int a = 0;
		try
		{
		a = Integer.valueOf(buffer);
		}
		catch(NumberFormatException e)
		{
			System.out.println("To nie jest liczba.");
			readInt();
		}
		if(a < -999 || a > 999)
		{
			System.out.println("Podałeś liczbę spoza przedziału.");
			readInt();
		}
		return a;
	}
	
	/**
	 * Metoda czytająca znak
	 */
	public static char readChar()
	{
		System.out.print("Podaj znak: ");
		String buffer = in.nextLine();
		char c = 0;
		if(buffer.length() != 1)
		{
			System.out.println("Wpisałeś za dużo znaków.");
			readChar();
		}
		if(buffer.equals(" "))
		{
			System.out.println("Wpisałeś spacje.");
			readChar();
		}
		switch(c = buffer.charAt(0))
		{
		case '+': c = '+';
			break;
		case '-': c = '-';
			break;
		case '*': c = '*';
			break;
		case '/': c = '/';
			break;
		default:
			buffer = "";
			System.out.println("Podałeś zły znak.");
			readChar();
			break;
		}
		return c;
	}
	
	/**
	 * Metoda licząca wynik
	 */
	public static int calculate(int a, char znak, int b)
	{
		int wynik = 0;
		switch(znak)
		{
		case '+': wynik = a + b;
			break;
		case '-': wynik = a - b;
			break;
		case '*': wynik = a * b;
			break;
		case '/': wynik = a / b;
			break;
		}
		return wynik;
	}
}

A problem jaki występuję to problem ze skanowanie danych próbowałem już przeróżnych sposobów i w rezulltacie nie umiem sobie z tym poradzić :/ Również chciałbym się zapytać czy w ogóle dobrze podchodzę do rozwiązywania tego czy też tekst nie powinnien np. być skanowany w jednej lini, a jeśli tak to również prosiłbym o jakąś podpowiedź.

1

Raz, dwa i trzy!
Miłego zapoznawania się z tematem

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