Fragment kodu wykonuje się przed innym fragmentem kodu

0

Witam, nie bardzo rozumiem dlaczego System.out.println(""); wykonuje sie już po podaniu zmiennej a. System.out.println("") znajduje sie w pętli, a podanie parametru przed petla, nie rozumiem wiec dlaczego ten kod sie wykonuje tak "wczesnie". Chodzi o to ze po podaniu wartosci do zmiennej a, w konsoli robi sie "odstęp". Może ktoś pomóc, wyjaśnić czemu tak sie dzieje ?
Kod

package test;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		int count, a;
		a = scan.nextInt();
		for (int k = 0; k < a; k++) {
			String tab = new String();
			tab = scan.nextLine();
			for (int i = 0; i < tab.length(); i++) {
				count = 1;
				while (i + 1 < tab.length() && tab.charAt(i) == tab.charAt(i + 1)) {
					i++;
					count++;
				}
				if (count > 2) {
					System.out.print(tab.charAt(i) + "" + count);
				} else if (count == 2)
					System.out.print(tab.charAt(i) + "" + tab.charAt(i));
				else
					System.out.print(tab.charAt(i));
			}
			System.out.println("Czemu wykonuje sie po podaniu wartosci a ? :c"); //<<-------- O to dokladnie chodzi 
		}
	}
}

0

A jak twoim zdaniem powinien działać ten kod?

2
        a = scan.nextInt(); //ts instrukcja wczytuje z klawiatury tylko liczbę, Enter zostaje w buforze klawiatury
        for (int k = 0; k < a; k++) {
            String tab = new String(); 
            tab = scan.nextLine(); //ta instrukcja wczytuje pusty wiersz, który został w buforze klawiatury

Na oko, to jesteś 1457-ą osobą, która ma taki problem.

0

Sorki, ale dalej nie rozumiem. Może przedstawię jak rozumiem, to a wiec kod jest czytany od góry do dołu i od lewej do prawej i teraz tutaj mnie ta rzecz zaskoczyła, że System.out.println("Czemu wykonuje sie po podaniu wartosci a ? :c"); wykonuje sie Od razu po podaniu wartosci paremetru a i tego nie rozumiem, że omija on cała reszte kodu tzn te pętle i sie wykonuje, a potem już wszystko działa tak jak powinno, tego "skoku" nie rozumiem. Staram się i chcę zrozumieć czemu tak jest. Może ktoś mi to w jakiś prosty sposób wytłumaczyć lub na jakimś przykladzie ? Z góry dziekuję :)

1

Przecież napisałem, że instrukcja

tab = scan.nextLine();

wczytuje pusty wiersz, zatem następująca po niej pętla się nie wykonuje.

2

Po wykonaniu

a = scan.nextInt();

W buforze siedzi pusty wiersz, tak więc następne wywołanie

tab = scan.nextLine();

Powoduje, że do zmiennej tab zapisywany jest pusty wiersz, przez co następna pętla nie jest wykonywana.

Po prostu po

a = scan.nextInt();

Zjedz ten pusty wiersz :

scan.nextLine();

Polecam :
https://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo

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