Java FileReader

FI
FI
  • Rejestracja:około 10 lat
  • Ostatnio:około 4 lata
  • Postów:471
0
Kopiuj
static void losujPytanie(FileReader obF,int numerPytania){
		StringBuilder SB = new StringBuilder();
		Scanner input = new Scanner(obF);
		String strIntr="";
		String str;
		
		while(input.hasNext()){
		str=input.nextLine();
		
		
		if((str.substring(0,1).contains(String.valueOf(numerPytania)))){
			SB.append(str);
			do{	
				SB.append(String.format("%s\n", strIntr));
				strIntr=input.nextLine();
				
				if(!input.hasNextLine()) {
					SB.append(strIntr);
					break;}
			}while(!strIntr.substring(0, 1).contains(String.valueOf(numerPytania+1)));
			//break;
		};
		
		}
		input.close();
		System.out.println(SB);
	}


public static void main(String[] args) throws IOException {
		FileReader obF = new FileReader("quiz.txt");
		losujPytanie(obF, 5);
		losujPytanie(obF, 1);	
	}

Przy takim kodzie, w konsoli pojawia sie tylko jedno wywolanie pytania. Jesli jednak przerzuce tworzenie obiektu FileReader obF = new FileReader("quiz.txt"); do funkcji losujPytanie, to wtedy wyskakują dwa pytania.

moje pytanie - dlaczego tak sie dzieje, ze jezeli obiekt FileReader jest w parametrze funkcji losujPytanie to drugie wywolanie tej funkcji "nie dziala" , a gdy wrzuce obiekt FileReader</code> do wnetrza funkcji <code> losujPytanie to wtedy funkcja dziala zgodnie z moim oczekiwaniem?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Nie rozumiem co Cię dziwi. Pętla

Kopiuj
while(input.hasNext())

w metodzie losujPytanie dochodzi do końca pliku. Jak drugi raz wywołujesz metodę losujPytanie to już nie ma co czytać.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
freemp3
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Miechów
  • Postów:284
0

Trzeba zresetować obiekt obF po odczytaniu pytania.
Przy odczytywaniu pytania nr 5 wskaźnik jest już za pierwszym pytaniem więc go nie odczyta - zakładam, że pytania są ułożone w kolejności od najmniejszego do największego. Dlatego też trzeba zresetować obiekt, aby wskaźnik wrócił na początek pliku.


bogdans
To nie jest takie proste, obiektu obF nie można zresetować (reset() not supported). Trzeba zmienić klasę FileReader na File i resetować Scanner.
FI
FI
  • Rejestracja:około 10 lat
  • Ostatnio:około 4 lata
  • Postów:471
0

ok, alles klar,

myslalem ze jak wywolam ponownie metode losuj pytanie to czytanie pliku rozpocznie sie od nowa.

tzn w sumie to czyta, tyle ze input.hasNext() jest false

edytowany 1x, ostatnio: filemonczyk

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.