Argumenty z wiersza poleceń

0

Hej, muszę utworzyć kalkulator, który będzie pobierał argumenty w wiersza poleceń.

public class Main {
    public static void main(String[] args) {
        Calc c = new Calc();
        String wynik = c.doCalc(args[0]);
        System.out.println(wynik);
    }
}

Klasa Main jest niemodyfikowalna. Czy w ogóle jest możliwość, aby sczytać przykładowo "20 + 3" jako jeden string pod indeksem args[0]? (jako args[0], args[1] i args[2] nie ma problemu)

2

String.join(" ", args) powinno wystarczyć.
docs.oracle.com

0

@Delor: wymodziłem taką klasę Calc.


import java.math.BigDecimal;
import java.util.HashMap;
import java.util.function.BinaryOperator;

public class Calc {

    String[] tokens;
    HashMap<String, BinaryOperator<Double>> operators = new HashMap<>();


    public String doCalc(String cmd) {
        operators.put("+", (a,b) -> a + b);
        operators.put("-", (a, b) -> a - b);
        operators.put("*", (a, b) -> a * b);
        operators.put("/", (a, b) -> a / b);

        try {
            tokens = cmd.split("\\s+");
            Double a = Double.parseDouble(tokens[0]);
            Double b = Double.parseDouble(tokens[2]);
            String op = tokens[1];

            double result = doOperation(a, b, op);
            String string = Double.toString(result);
            return string;
        } catch (Exception e) {
            return "Invalid command to calc";
        }
    }

    public double doOperation(Double a, Double b, String op) {
        return operators.get(op).apply(a, b);
    }
}

Nie mam pojęcia jak użyć String.join(" ", args). W moim przykładzie sczytuje tylko jedną wartość. Dla argumentów w cmd 20 + 3 tylko 20.

0

Jeżeli twoje działanie znajduję się w stringu np.
token[0] = "20"
token[1] = "+"
token[2] = "3"

i chcesz to połączyć w jednego stringa (jeżeli dobrze zrozumiałem) to piszesz:

String final = String.join(" ", token)

Wtedy string final = "20 + 3".

0

@brus97: tak, tyko ja nie docieram do token[1] i token[2]. W Main mam tylko w metodzie c.doCalc(args[0]).

0

Wyniku joina użyj jako argumentu w tej metodzie.
token[] to efekt użycia tokens = cmd.split("\\s+"); (czyli odwrotności join'a).

0

@Delor: w wierszu poleceń cmd wpisuję działanie, które może zawierać dowolną ilość białych znaków i args[0] zawsze oznacza pierwszy wyraz. dla 20 + 3 sczytuje tylko 20. jak sprawić, aby args[0] było jednym stringiem "20 + 3"?

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