Java FileReader

0
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?

0

Nie rozumiem co Cię dziwi. Pętla

while(input.hasNext())

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

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.

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

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