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
{
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()
{
Scanner INT = new Scanner(System.in);
System.out.print("Podaj liczbę: ");
String buffer = INT.next();
INT.close();
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()
{
Scanner CHAR = new Scanner(System.in);
System.out.print("Podaj znak: ");
String buffer = CHAR.nextLine();
CHAR.close();
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ź.