Java Reflection - pobieranie argumentów programu

0

Cześć!
Program zostaje wywołany z argumentami.
Muszę dostać się do wartości tych argumentów z klasy innej niż Main.
Nie mogę klasy Main modyfikować i muszę użyć refleksji.
Domyślam się, że muszę pobrać wartości parametrów funkcji main w tym celu, jednak nie wiem jak to zrobić.
Jest ktoś w stanie mi to wyjaśnić?
Podstawy refleksji już mam, wiem jak np. pobrać listę metod main z innej klasy. Po prostu zatrzymałem się w tym przypadku i nie wiem jak dalej ruszyć.

0

Powiem więcej, bo coś namieszałem. Zadanie które mam do zrobienia, jest dokładnie tutaj:
http://4programmers.net/Forum/1136633

Chciałem podejść do tego sam, jednak przy pobieraniu operatora:

 
String[] items = arg.split("\\s+");
/*test*/
System.out.println(items[0]);
System.out.println(items[1]);
System.out.println(items[2]);

przy out.println items[1] wyrzuca:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at zad1.Calc.doCalc(Calc.java:27)
at zad1.Main.main(Main.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

0

W jaki sposób przechowujesz te argumenty? Mógłbyś podać uproszczony przykład problemu?

Co do tego błędu, to sugeruje on że w tablicy items jest tylko jeden element.

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

Tak wygląda klasa Main. Argumenty są podawane przy uruchamianiu programu, w Main można je odczytać za pomocą args[0], args[1] i args[2], jednak w poleceniu jest napisane, że nie wolno modyfikować tej klasy. args[0] jest pierwszą liczbą, args[1] operatorem (którymś z + - * /) a args[2] drugą liczbą. Metoda doCalc z klasy Calc powinna obliczyć i zwrócić wynik całej operacji, jednak jako argument dostaje jedynie pierwszą liczbę (args[0]) i nie mogę dostać się do args[1] oraz args[2].

0

Dodam, że w zadaniu nie można używać if, switch, for, while.

0

Jeżeli dane są przechowywane w trzech elementach tablicy, to dlaczego przekazujesz tylko pierwszy?

EDIT: Zauważyłem, że nie możesz zmodyfikować klasy Main. Tego zadania się nie da rozwiązać.

0

Musi się dać :)
https://sdkp.pjwstk.edu.pl/html/staskshtml/S_BIGDECCALC/S_BIGDECCALC.html
Tu jest treść, a tutaj:
http://4programmers.net/Forum/1136633
Rozwiązanie, które u mnie nie działa nie wiem czemu.

0

Jeżeli dane wejściowe przekazujesz w postaci trzech parametrów do programu to jest to niemożliwe do rozwiązania i nawet refleksja ci tu nie pomoże. Gdyby na przykład udało ci się całe te wyrażenie przekazać w postaci jednego parametru, wtedy będzie się dało to rozwiązać.

0

Tylko jak napisać kod, żeby traktował np. argumenty 5 + 3 jako jeden argument?

0

Spróbuj podać te argumenty jako jeden parametr. W kodzie na to w żaden sposób nie możesz wpłynąć.

0

W treści zadania jest

po uruchomieniu winna wyprowadzić na konsolę wynik obliczenia (np. jesli podano jako argument wiersza poleceń
"1 / 2"

Czyli trzeba wpisać jako argument dokładnie to -> "1 / 2" wraz z cudzysłowiem... Z przyzwyczajenia myślałem, że ten cudzysłów tylko podkreśla jakie wartości mają być jako argumenty i go pominąłem. Teraz ma to sens :) Dzięki za zainteresowanie.

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