Pętle: Odliczenie do wybuchu bomby

Spis treści

Zadanie

Napisz program, który pobierze od użytkownika całkowitą liczbę dodatnią. Następnie wyświetl na ekranie Odliczanie z tekstem "Bomba wybuchnie za ... " gdzie w miejsce dwukropka mają się pojawić liczby od podanej przez użytkownika do 0. Napisz program w 3 wersjach przy użyciu różnych pętli.

Rozwiązanie

W tym zadaniu najpierw należało pobrać od użytkownika dane, na przykład przy pomocy klasy znanej nam klasy Scanner i zapisać ją do zmiennej. Następnie używając pętli i dekrementacji wyświetlać kolejne komunikaty.

import java.util.Scanner;

public class Odczyt{
  public static void main(String[] args){
	  Scanner odczyt = new Scanner(System.in);
	  int zegar;

	  System.out.println("Podaj czas bomby: ");
	  zegar = odczyt.nextInt();

	  //wersja z while
	  while(zegar>0){
		  System.out.println("Bomba wybuchnie za "+zegar);
		  zegar--;
	  }
	  System.out.println("BUM!");
  }
}
import java.util.Scanner;

public class Odczyt{
  public static void main(String[] args){
	  Scanner odczyt = new Scanner(System.in);
	  int zegar;

	  System.out.println("Podaj czas bomby: ");
	  zegar = odczyt.nextInt();

	  //wersja z do...while
	  do{
		  System.out.println("Bomba wybuchnie za "+zegar);
		  zegar--;
	  }
	  while(zegar>0);
	  System.out.println("BUM!");
  }
}
import java.util.Scanner;

public class Odczyt{
  public static void main(String[] args){
	  Scanner odczyt = new Scanner(System.in);
	  int zegar;

	  System.out.println("Podaj czas bomby: ");

	  for(zegar=odczyt.nextInt(); zegar>0; zegar--)
		  System.out.println("Bomba wybuchnie za "+zegar);
	  System.out.println("BUM!");
  }
}

Jak widać w ostatnim przykładzie w pętli for jako licznika możemy użyć równie dobrze zmiennej globalnej, a zainicjowania dokonać już w jej wnętrzu.

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.

Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.

Tomek

Witam, próbowałem zrobić to wszystko w jednym programie jednak mam problem z ustaleniem zmiennej czytanej 2 ostatnich operacji, proszę o pomoc , podaję swój kod programu : import java.util.Scanner; public class Petle{public static void main(String[] args){ Scanner odczyt = new Scanner(System.in); int liczba = odczyt.nextInt(); while(liczba>=0){System.out.println("Bomba wybuchnie za "+liczba); liczba--;} System.out.println("BUM!"); System.out.println("\n"); System.out.println("\n"); int liczba2 = odczyt.nextInt(); do{System.out.println("Bomba wybuchnie za "+liczba); liczba--;} while(00; liczba3--){ System.out.println("Bomba wybuchnie za "+liczba3);} System.out.println("BUM!"); System.out.println("\n"); System.out.println("\n"); }}

Slawek

Szczerze mówiąc nie zrozumiałem Tomku, wklej konkretny fragment kodu, albo podeślij mi na maila :) Być może chodzi o to, że nie domykasz klamer tam gdzie powinieneś.

Mereel

while(liczba>=0){System.out.println(„Bomba wybuchnie za „+liczba); liczba–;} TUTAJ BLAD liczba -- ;} TAK LEPIEJ

Greg

nie bardzo ogarniam ten chaotyczny kod, ale wydaje mi sie ze twoja druga petla wysypuje sie, bo używasz wciąż zmiennej 'liczba', zamiast zmiennej liczba2. Zmienna 'liczba' w pętli do{}while() jest już równa zeru, być może stąd masz kłopot.

Wozek

Z tego co zauważyłem to jest tu kilka błędów. 1.We wszystkich pętlach źle dekrementujesz zmienną liczba powinno być liczba--; zamiast liczba-; 2. W pętli do while używasz zmiennej liczba zamiast liczba2. 3. Zamiast zakończyć pętlę do whiel ty otwierasz nową z nie zrozumiałym warunkiem powinno być: while(liczba2>0); zamiast: while(00; liczba3–){ Pozdrawiam.

laik

Wypowiadasz się kolego a tak na prawdę nie masz pojęcia jak działają pętle , każda pętla (for , while , do while ) to odzielny program , napisany przez Sławka ! dlatego może używać słowo liczba w każdym z powyższych programów .

Tomek

Chyba za długi kod do skopiowania stąd nie wszystko i błędami się pojawiło. Ale z do{}while() można zobaczyć o co mi chodzi.

YeeeZooo

Ja zrobiłem tak: import java.util.Scanner; public class Petla{ public static void main(String[] args){ System.out.println("Podaj liczbę"); int w = (new Scanner(System.in).nextInt()); while(w>0){ System.out.println("Bomba wybuchnie za ..."+w+"s"); w--; } System.out.println("BUM!!!!!"); System.out.println("Podaj liczbę"); int k = (new Scanner(System.in).nextInt()); do{ System.out.println("Bomba wybuchnie za ..."+k+"s"); k--; } while(k>0); System.out.println("BUM!!!!!"); System.out.println("Podaj liczbę"); int i = (new Scanner(System.in).nextInt()); for(; i>0; i--){ System.out.println("Bomba wybuchnie za ..."+i+"s"); } System.out.println("BUM!!!!!"); } }

Mereel

a ja mam wersje deluxe sprawdzajaca rodzaj liczby :D import java.util.Scanner; public class Zad111A { public static void main (String [] args) { Scanner input = new Scanner (System.in); //przygotowanie System.out.println ("Podaj prosze liczbe calkowita, dodatnia:"); int liczba = input.nextInt (); if (liczba>0) { for (int i=liczba;i>=0 ; i-- ){ System.out.println ( "Bomba wybuchnie za " +i); } System.out.println ("Kaboommmm"); } else System.out.println ("Zla liczba. Mowilem kurna ze liczba ma byc calkowita, dodatnia!!!"); } }

Mereel

system wiadomosci zamienia dwa minusy w jeden -- = - - zobacze czy plusy tez ++ = + +

Sylwek

A dlaczego tak nie można zrobić?? <code> Scanner odczyt = new Scanner(System.in); int a; a = odczyt.nextInt(); for (a; a&gt;0;a--) System.out.println("bomba wybuchnie za " + a); </code>

Paweł

for (a; a&gt;0;a--) w tej linijce jest a, który jest niezdefiniowane; tu musi być a=b albo wprowadzić zmienną globalną jak w rozwiązaniu; na początku zrobiłem int a,i; a = odczyt z klawiatury; i = a; i operowałem potem w pętli i, a a wisiał gdzieś; rozwiązanie podpowiedziało mi jak to zoptymalizować :P

Krzysiek

Wszystko ładnie cacy, z zadankiem żadnych problemów, tylko zaintrygowała mnie jedna ciekawostka. Mianowicie, według wszystkich znaków na niebie i ziemi zmienna int (4 bajty) to zakres od -2 147 483 648 do 2 147 483 647 tak więc dlaczego nasza bomba a sciślej mówiąc jej timer zaczyna odliczanie zawsze od tylko 297, nawet jak go "nastawimy" na więcej np. na 356. Czy to zależy od czegoś innego niż od zmiennej int, przecież scanner odczyta chyba każdą wprowadzoną liczbę i nie tylko liczbę... Przy okazji podziękowania za fajny kurs, dzięki niemu ruszyłem z miejsca, a jest to moja pierwsza przygoda z programowaniem.

Halwor

Też to zauważyłem. I doszedłem do wniosku, że konsola wyświetla ostatnie 300 linii tekstu. Te ostatnie 3 odliczania, co ich brakuje, to ścieżka która zawsze pojawia się na koniec działania programu, znak nowej linii i akurat w tym programie tekst "BUM!" :). PS. Kurs swoją drogą świetny, nie umie się doczekać aż opanuję aplikacje okienkowe (czy jakoś to się tam zwie).

mianod

zamiast pisać "int zegar;" a później znow "zegar = odczytnextInt();" można od razu podać "int zegar = odczyt.nextInt();" może to nie wiele ale ogranicza to wielkość kodu przy większym programie oraz program zajmuje mniej na dysku :)

jan

import java.util.Scanner; public class Bomba3{ public static void main (String[] args){ Scanner odczyt=new Scanner (System.in); int zegar; System.out.println("podaj czas rozpoczecia odliczania"); zegar=odczyt.nextInt(); for(int i=zegar; i&gt;0; i--){ System.out.println("Pozostalo "+zegar); zegar--; } System.out.println("BUM"); } } zegar=odczyt.nextInt(); czy można tego użyć tak jak w moim kodzie przed pętlą for

Janosch

A tutaj moja wersja zadania 1.11 z pokazaniem czasu w dniach, godzinach, minutach i sekundach z wykorzystaniem 3 różnych pętli. http://forum.javastart.pl/Thread-P%C4%99tle-while-do-while-for?pid=987#pid987