Witam proszę o naprowadzenie lub poprawienie kodu. Na innym forum ktoś powiedział, żebym zamiast rekurencji użył pętli ale próbowałem już na wiele sposobów i nie wiem jak to zrobić :( Ogólnie program się sypie i rzuca wyjątek NoSuchElementException tylko gdy po błędnym wpisaniu danych w następnej pętli wpiszemy je dobrze. Wypisuje wynik ale i wyjątek. Pomocy! Jestem nowy dopiero się ucze, a nikt mnie nie może naprowadzić i wskazać błąd
package ćw5;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Zad2
{
String linia;
static double wyn = 0;
static double kalkulator(String linia)
{
String errorMessage = "\nWadliwe dane! Spróbuj ponownie!\n";
StringTokenizer token = new StringTokenizer(linia);
if (token.countTokens() != 3)
{
System.err.println(errorMessage);
Zad2.setLine();
}
String a = token.nextToken(), // pierwsza liczba
b = token.nextToken(), // znak
c = token.nextToken(); // druga liczba
int num1 = 0, num2 = 0; // pomocnicze zmienne
try
{
num1 = Integer.parseInt(a);
num2 = Integer.parseInt(c);
} catch (NumberFormatException e)
{
System.err.println(errorMessage);
Zad2.setLine();
}
char znak = b.charAt(0);
if (b.length() != 1 || (znak == '/' && num2 == 0))
{
System.err.println(errorMessage);
Zad2.setLine();
}
switch (znak)
{
case '+':
wyn = num1 + num2;
break;
case '-':
wyn = num1 - num2;
break;
case '*':
wyn = num1 * num2;
break;
case '/':
wyn = num1 / num2;
break;
case '%':
wyn = num1 % num2;
break;
default:
{
System.out.println(errorMessage);
Zad2.setLine();
}
}
return wyn;
}
static void setLine()
{
Scanner skan = new Scanner(System.in);
String linia = skan.nextLine();
double wynik = Zad2.kalkulator(linia);
System.out.println("Wynik: " + wynik);
skan.close();
}
public static void main(String[] args)
{
System.out.println("Witaj w moim kalkulatorze! Wprowadz jakieś działanie (np. 1 + 2)");
Zad2.setLine();
}
}