Program wyswietla dane w innym formacie niż przewidziany

0

Witam,

poniższy kod działa jednak przy wyświetlaniu wyników dla 'słów' zamiast słów podstawia tajemnicze dla mnie '-3' a dla 'liczb' tajemnicze '-2'.
bardzo proszę o pomoc i sugestie dlaczego tak się dzieje.

import java.io.*;
import java.util.*;

public class Main2{
	public static void main(String args[]){
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader brIn = new BufferedReader(isr);
		StreamTokenizer strTok = new StreamTokenizer(brIn);
		ArrayList list = new ArrayList();
		ArrayList list2 = new ArrayList();
		int line = 0;
		System.out.println("Wprowadź tekst. By zakończyć wpisz 'quit'");
		try{
 			while(!"quit".equals(strTok.sval)){
				line=strTok.nextToken();
				if(strTok.ttype==StreamTokenizer.TT_NUMBER){
					list.add(line);
				}
				else{
					list2.add(line);
				}
			}
		}
		catch(IOException e){
			System.out.println("Błąd wejścia-wyjścia");
		}
		String line2 = "";
		System.out.println("Słowa:");
		int size = list2.size();
		for(int i = 0; i < size; i++){
			line2=list2.get(i).toString();
			System.out.println(line2);
		}
		System.out.println("Liczby:");
		int size1 = list.size();
		for(int i = 0; i < size1; i++){
			line2=list.get(i).toString();
			System.out.println(line2);
		}
	}
}
0

No to klikasz sobie na początku kodu "add breakpoint" a następnie uruchamiasz program z debugerem. Nikt tego za ciebie nie zrobi.

0

Dziwaczniejszego sposobu nie znalazłeś? nextToken() zwraca int https://docs.oracle.com/javase/8/docs/api/java/io/StreamTokenizer.html#nextToken--

0

zgadza się, dlatego wywołałem metodę toString()
dane powinny być wyświetlone w takim formacie w jakim je wprowadzałem?
byc może źle to rozumiem dlatego będę wdzięczy za sugestie.

0

zgadza się, dlatego wywołałem metodę toString()
Tak, wywołałeś metodę toString na liczbie, zatem w wyniku otrzymałeś ciąg znaków zawierający liczbę (prosta zależność).
http://ideone.com/Zhmtys

Musisz do listy dodawać ciągi znaków reprezentujące Twoje tokeny.

0

@estudiante, zajrzałeś do dokumentacji? Metoda nextToken() zwraca typ tokenu, a nie jego zawartość.

0

zmieniłem swój kod i oparłem go o klasę Scanner.
tym razem wszystko jest wyświetlane ok (nie muszę się martwić o zwracany typ) z tym, że wyniki są pomieszane (wartości Int wskakują do słów, double do Int itd)
naprawdę nie wiem co jest nie tak.

import java.io.*;
import java.util.*;

public class Main2{
	public static void main(String args[]){
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader brIn = new BufferedReader(isr);
		StreamTokenizer strTok = new StreamTokenizer(brIn);
		ArrayList list = new ArrayList();
		ArrayList list2 = new ArrayList();
		ArrayList list3 = new ArrayList();
		String line = "";
		System.out.println("Wprowadź tekst. By zakończyć wpisz 'quit'");
		try{
 			while(!"quit".equals(line)){
				line=brIn.readLine();
				Scanner scan = new Scanner(line);
					if(scan.hasNextDouble()){
						list.add(line);
					}
					else if(scan.hasNextInt()){
						list2.add(line);
					}
					else{
						list3.add(line);
				}
			}
		}
		catch(IOException e){
			System.out.println("Błąd wejścia-wyjścia");
		}
		Object line2 = null;
		System.out.println("Słowa:");
		int size = list3.size();
		for(int i = 0; i < size; i++){
			line2=list3.get(i).toString();
			System.out.println(line2);
		}
		System.out.println("Wartości Int:");
		int size1 = list2.size();
		for(int i = 0; i < size1; i++){
			line2=list2.get(i).toString();
			System.out.println(line2);
		}
		System.out.println("Wartości Double:");
		int size2 = list.size();
		for(int i = 0; i < size2; i++){
			line2=list.get(i).toString();
			System.out.println(line2);
		}
	}
}
0

Ten kod nie ma prawa działać, jeśli użytkownik wpisze 33, to metoda nextDouble() zwróci true (bo 33 jest poprawną liczbą zmiennoprzecinkową).
Nie wiem czy wiesz, że klasa Scanner jest zlokalizowana i w Polsce oczekuje liczb zmiennoprzecinkowych w postaci 45,78.

0

dzięki wielkie:)
całe szczęście poczucie humoru też jest zlokalizowane i można je znaleźć na 4P:)

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