Wpis z mikrobloga

#java #programowanie #netbeans

Jak szybko zrobić test programu konsolowego?

Tzn. mam program i od użytkownika pobieram np. 10 intów. Program coś tam robi i wypisuje wynik. Co zrobić, żebym podczas testowania nie musiał ręcznie wklepywać tych 10 danych, tylko je jakoś wkleić?

  • 12
@kuhar: @kuhar: Moglibyście podać jakiś przykład/linka o co chodzi?

@akurczak: Dzięki za link. Szukałem tam, ale tego nie widziałem.

Jak wrzucam tylko jedną liczbę to jest OK:

' InputStream stdin = System.in; '

System.setIn(new ByteArrayInputStream("1".getBytes()));

Scanner scanner = new Scanner(System.in);

System.out.println(scanner.nextLine());

Ale jak już chcę więcej (a o to mi właśnie chodzi, że jest ich dużo), to nie wiem jak (to nie działa):

InputStream stdin = System.in;

System.setIn(new ByteArrayInputStream("1".getBytes()));
@kuhar: A to w Bashu na Linuksie. Jest jakiś odpowiednik tima w Wierszu Poleceń (pracujemy pod Windowsami)? Bo przekierowania strumieni to się robi podobnie.

Chociaż wolałbym, żeby było spod NetBeansa, a nie przełączać się na konsolę ;P
@mk321: Dwukrotnie podmieniasz strumień wejścia, więc scanner wykorzysta ten ostatni, gdzie na wejściu jest tylko dwójka. Jeśli chcesz wykorzystać jak w przykładzie metodę

nextLine()
to po prostu będziesz miał np.

System.setIn(new ByteArrayInputStream("1\n7".getBytes()));
.

W ten sposób wczytujesz całe linie w postaci Stringów, a mówiłeś o intach, więc wykorzystasz prawdopodobnie metodę

nextInt()
, a więc wystarczy, że oddzielisz liczby w Stringu reprezentującym wejście spacjami. No i oczywiście link podsyłałem z myślą o
@akurczak: Wczytuję na zmianę i Stringi i inty.

Próbowałem z \n, ale mi nie działało. A rzeczywiście dla przykładu co podałem to działa.

Bo też mam problem z wczytywaniem na zmianę. Bo jak zrobię nextInt() i potem chcę zrobić nextLine(), to muszę zrobić jeszcze raz nextLine() (bo z tamtego inta została pusta linia).

http://stackoverflow.com/questions/14452613/issues-with-nextline

I jak chcę wczytać np.

8

n

n

To mam (i działa):

System.setIn(new ByteArrayInputStream("8\nn\nn".getBytes()));

Ale jak już