Kalkulator prosty - Uproszczanie kodu

0

Napisałem taki kod w Javie jak można by się pozbyć tego zaznaczonego kodu(powtarza się ale chciałbym aby wykonywał się tylko gdy switch zachodzi),oraz przychodze z zapytaniem co można w tym kodzie jeszcze uprościć, oraz czy macie jakieś fajne zadanko do napisania w Javie?

import java.util.Scanner;
public class KalkulatorProsty {
    public static void main(String[] args) {
        float x=1;//first number
        float y=1;//second number
        int p;//number of action
        float k;//score
        Scanner scanner = new Scanner(System.in);
        System.out.println("1-Dodawanie");
        System.out.println("2-Odejmowanie");
        System.out.println("3-Mnozenie");
        System.out.println("4-Dzielenie");
        System.out.println("Wprowadz cyfre dla konkretnego dzialania: ");
        p = scanner.nextInt();
        if (p>4){
            System.out.println("Wybierz liczbe 1, 2, 3, 4 !!!");
        }
        else if(p<=0){
            System.out.println("Ta liczba nie moze byc ujemna ani rowna zero !!!");

        }
        else {
            System.out.println("Podaj pierwsza liczbe");
            x = scanner.nextFloat();
            System.out.println("Podaj druga liczbe");
            y = scanner.nextFloat();

        }
        switch (p) {
            case 1 -> {
                k = x + y;
                System.out.println("Wynik to: "+k);// Tutaj

            }
            case 2 -> {
                k = x - y;
             System.out.println("Wynik to: "+k);// Tutaj

            }
            case 3 -> {
                k = x * y;
               System.out.println("Wynik to: "+k);// Tutaj


            }
            case 4 -> {
                k = x / y;
                System.out.println("Wynik to: "+k); //Tutaj

            }
        }
    }
}
3

Przed switch bool ok=true;
Do switch dodajesz default: w którym ok=false;
Po switch if(ok) ...

Z tym że to nie jest nawet blisko sensowny kod.

3

Komentowanie zmiennych zamiast dania im dobrej nazwy
formatowanie kodu w poście

Zgadzam się z przesłaniem @_13th_Dragon daleko temu do dobrego kodu

1
_13th_Dragon napisał(a):

Przed switch bool ok=true;
Do switch dodajesz default: w którym ok=false;
Po switch if(ok) ...

można też przesunąć całego switcha do else'a

1
KamilAdam napisał(a):

można też przesunąć całego switcha do else'a

Albo w ogóle po ludzku zrobić:

import java.util.Scanner;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Calculator
{
   private static final Scanner scanner=new Scanner(System.in);
   private static final String doubleregex="[-+]?[0-9]*(\\.?[0-9]+([eE][-+]?[0-9]+)?)?";
   private static final String spregex="[\\s]*";
   private static final String opregex="[+\\-\\*\\/]";
   private static final Pattern pattern=Pattern.compile("^"+spregex+"(?<a>"+doubleregex+")"+spregex+"(?<op>"+opregex+")"+spregex+"(?<b>"+doubleregex+")"+spregex+"$");
   private static interface calc { double calc(double a,double b); }
   private static final HashMap<String,calc> map=new HashMap<String,calc>()
   {
      {
         put("+",(a,b) -> a+b);
         put("-",(a,b) -> a-b);
         put("*",(a,b) -> a*b);
         put("/",(a,b) -> a/b);
      }
   };

   public static void main(String[] args)
   {
      while(true)
      {
         System.out.print("Podaj wyrażenie matematyczne (7*3): ");
         Matcher matcher=pattern.matcher(scanner.nextLine());
         if(matcher.find())
         {
            final String op=matcher.group("op");
            final String astr=matcher.group("a");
            final String bstr=matcher.group("b");
            double a=Double.parseDouble(astr);
            double b=Double.parseDouble(bstr);
            System.out.printf("%s %s %s = %g",astr,op,bstr,map.get(op).calc(a,b));
            System.out.println();
         }
         else System.out.println("Niepoprawny syntaks\n");
      }
   }
}

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