Wątek przeniesiony 2017-10-05 09:29 z Java przez ŁF.

Pętla for, integer zamieniony na napis w 3, 5 iteracji

0

Witam
Ma problem aby zastąpić np. co 3 lub co 5 wyraz wyjściowy funkcji for napisem. Aby kod wyglądał tak:

1
2
Fiz
4
5
Fiz

Zrobiłem to na ifach, jednak kod jest nie efektywny:

String fiz = "Fiz";
for(int i=0; i<25; i++){
 if ((i == 3) || (i == 6) ||....) {
                    System.out.println(fiz);
                    i++;
              }
}

Następnie probowałem w taki sposób, lecz tylko w 2 iteracji udało mi się wypisać napis.

Main {
  Sol.soultion(26);
}

class Sol {
    static void soultion(int N) {
        String fiz = "Fiz";
           for (int i = 1; i <= N; i++) {
            System.out.println(i);
                i++;
            System.out.println(fiz);
            }
        }
    }
1

W takich przypadkach przydatna jest reszta z dzielenia (modulo).

for (int i = 0; i < 25; i++) {
	System.out.println(i % 3 == 0 ? "Fiz" : i);
}

Edit:
W nieco bardziej "przystępnej" formie

for (int i = 0; i < 25; i++) {
	if (i % 3 == 0) {
		System.out.println("Fizz");
	}
	else if (i % 5 == 0) {
		System.out.println("Buzz");
	}
	else {
		System.out.println(i);
	}
}
1

Umówmy sie, Fizz Buzz Musisz napisać sam, potem możemy Ci pomagać:)

0
AreQ212 napisał(a):

W takich przypadkach przydatna jest reszta z dzielenia (modulo).

for (int i = 0; i < 25; i++) {
	System.out.println(i % 3 == 0 ? "Fiz" : i);
}

Dzięki za pomoc!
Mógłbyś wytłumaczyć ten zapis?
Ja to rozumiem w ten sposób:
Pytajnik pełni funkcje podmiany "i" na napis, a ":i" pełni fukcje inkrementacji w kolejnej linijce.
Jednak zastanawia mnie czemu ten zapis nie wygląda tak: System.out.println(i % 3 == 0 +? "Fiz"+ : i);

0

To taki skrótowy zapis if'a, na forum już zresztą ktoś o to pytał co oznacza '?'

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