Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Rozwiązanie 1.11

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.

Komentarze

Komentarze zamknięte. Zapraszamy do grupy na Facebooku
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ć??

Scanner odczyt = new Scanner(System.in);
int a;
a = odczyt.nextInt();

for (a; a>0;a--)
System.out.println("bomba wybuchnie za " + a);

Paweł

for (a; a>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>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