Kurs Java Podstawy - rozszerzony

Pętle

Pętle w programowaniu są wykorzystywane niemal w każdym programie. Jest to jedna z podstawowych konstrukcji wykorzystywana we wszystkich językach programowania. Pozwalają one wykonywać określoną czynność cyklicznie w przypadku, gdy musimy na przykład wyświetlić 10 razy prawie to samo. Poznamy tutaj pętle, które pozwalają powtarzać jakąś czynność niewiadomą ilość razy oraz takie, które z góry zakładają ileś wykonań.

Pętla while

Pętlę while najczęściej wykorzystuje się w miejscach, gdzie zakładana ilość powtórzeń jest bliżej nieokreślona, ale znamy warunek jaki musi być spełniony. Jej schematyczną postać przedstawiono poniżej:

while(warunek){
  instrukcje do wykonania
}

Gdy warunek jest spełniony instrukcja we wnętrzu pętli jest wykonywana. Jeżeli natomiast warunek jest fałszywy może się ona nie wykonać, ani razu. Zazwyczaj stosuje się jakąś zmienną liczbową, a następnie dzięki inkrementacji, lub dekrementacji zmienia do momentu, aż warunek stanie się fałszywy. Podobnie jak przy instrukcji warunkowej if można pominąć nawiasy klamrowe w wypadku, gdy w ciele pętli znajduje się tylko jedna metoda, lub dowolna instrukcja. Dobrze jest sobie zapamiętać ją jako: "dopóki warunek jest spełniony to wykonuj instrukcje". Zobaczmy jej działanie na praktycznym przykładzie:

public class Odczyt{
  public static void main(String[] args){
	  int licznik = 0;

	  while(licznik<10){
		  System.out.println("To jest petla");
		  licznik++;
	  }
          System.out.println("Koniec pętli");
  }
}

Zadeklarowaliśmy zmienną licznik i przypisaliśmy jej 0. Sprawdzamy warunek, czy jest ona mniejsza od 10 - faktycznie jest więc wykonujemy instrukcje w jej wnętrzu. Wyświetlamy tekst "To jest petla" i zwiększamy licznik o 1. Następnie znowu sprawdzany jest warunek, czy 1<10, ponownie tak, więc powtarzamy poprzednie czynności. Gdy licznik osiąga wartość 10 warunek jest fałszywy, ponieważ 10 nie jest mniejsze od 10. Pętla jest przerywana i wyświetlany jest tekst "Koniec pętli".

Pętla do ... while

Różni się ona od pętli while przede wszystkim tym, że to co znajduje się w jej wnętrzu wykona się przynajmniej raz, ponieważ warunek jest sprawdzany dopiero w drugiej kolejności. Schematyczna budowa przedstawia się o tak:

do{
  instrukcje do wykonania
}
while(warunek);

Zwróć uwagę na kończący wyrażenie średnik, który przy pętli while nie występuje. instrukcje do wykonania są egzekwowane przynajmniej raz, a dopiero później sprawdzamy warunek, gdy jest on prawdziwy, instrukcje są powtarzane. Tą pętlę można zapamiętać następująco "wykonuj instrukcje dopóki warunek jest prawdziwy" - widzimy tutaj tylko zamianę słów, ale mają one kluczowe znaczenie. Wcześniejszy przykład z użyciem pętli do...while wyglądałby tak:

public class Odczyt{
  public static void main(String[] args){
	  int licznik = 0;

	  do{
		  System.out.println("To jest petla");
		  licznik++;
	  }
	  while(licznik<10);
	  System.out.println("Koniec pętli");
  }
}

Przebieg działania jest prawie taki sam, tylko, że gdyby przykładowo licznik był zainicjowany liczbą 20, to mimo wszystko wyświetliłby się raz napis "To jest pętla". W naszym przypadku napis wyświetla się 10cio krotnie.

Pętla for

Pętlę for od dwóch poprzednich odróżnia przede wszystkim rodzaj zastosowań. W jej przypadku zazwyczaj wiemy dokładnie ile razy ma się jakaś czynność powtórzyć. Jej schemat to:

for(wyrażenie początkowe ; warunek ; modyfikator_licznika){
  instrukcje do wykonania
}

Wyrażenie początkowe służy do zainicjowania jakiegoś licznika, którym zazwyczaj jest w tym samym miejscu zadeklarowana zmienna typu całkowitego - najczęściej oznacza się je przy pomocy liter od "i" wzwyż, jest to przydatne przy zagnieżdżonych pętlach, gdzie przy długich nazwach ciężko by się było połapać. Warunek sprawdza, czy ma się wykonać instrukcja z wnętrza pętli, natomiast modyfikator zmienia licznik - zazwyczaj jest to instrukcja inkrementacji. Wcześniejszy przykład z wykorzystaniem pętli for wyglądałby więc tak:

public class Odczyt{
  public static void main(String[] args){
	  for(int i=0; i<10; i++){
		  System.out.println("To jest pętla");
	  }
	  System.out.println("Koniec pętli");
  }
}

Jak widać nie musieliśmy tutaj deklarować zmiennej globalnej, a zapis jest bardziej zwięzły. Działanie jest dokładnie takie samo jak w przypadku pętli while.

Zadania do samodzielnego wykonania:

1.11 Napisz program, który pobierze od użytkownika całkowitą liczbę dodatnią. Następnie przy użyciu 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.

<- Poprzednia LekcjaNastępna Lekcja ->

Komentarze

h3x

„Bomba wybuchnie za … ” :)
to mnie obudzilo :P

Witek

Inny przykład:

import java.util.Scanner;


public class Plan_Dnia_Do_Wchile {

/**
* Napisz program, który pobierze od użytkownika interesujący dzień tygodnia
* (np: 1 - Poniedziałek, 2 - Wtorek, itd) i przedstawi plan zajęć w danym dniu.
*
* @author Wiciu
*
*/
public static void main(String[] args){

Scanner odczyt;
int dzien;

System.out.println("Wybierz dzień (np: 1) - Poniedziałek");

do {
System.out.println("1. Poniedziałek");
System.out.println("2. Wtorek");
System.out.println("3. Środa");
System.out.println("4. Czwartek");
System.out.println("5. Piątek");
System.out.println("6. Sobota");
System.out.println("7. Niedziela");

odczyt = new Scanner(System.in);
dzien = odczyt.nextInt();

} while(dzien > 1 || dzien < 10);

System.out.println();

switch(dzien){
case 1:
System.out.println("Poniedziałek: \n wolny");
break;
case 2:
System.out.println("Wtorek: \n sprawdzian z angielskiego");
break;
case 3:
System.out.println("Środa: \n jedziemy na wycieczkę");
break;
case 4:
System.out.println("Czwartek: \n zaliczenie z prawa");
break;
case 5:
System.out.println("Piątek: \n wybieram się na basen");
break;
case 6:
System.out.println("Sobota: \n matematyka, angielski");
break;
case 7:
System.out.println("Niedziela: \n L.B.");
break;
default:
System.out.println("Nie ma takiego dnia tygodnia - Wybierz ponownie");

}

System.out.println();
System.out.println("Koniec programu");

}

}

Magdalena

Ten skrypt nie wyświetla dni tygodnia. Po wpisaniu numeru wyświetla listę wszystkich dni z ich numerami. Nie wyświetla tego, co poniżej, czyli opisów dni tygodnia... Wie ktoś jak to naprawić?

Artur

w kodzie jest błąd w linijce z warunkiem pętli do...while.
Zamiast: while(dzien > 1 || dzien < 10);
powinno być: while(dzien 10);

Artur

EDIT:

w kodzie jest błąd w linijce z warunkiem pętli do...while.
Zamiast: while(dzien > 1 || dzien < 10);
powinno być: while(dzien 10);

Artur

...nie patrz na to. Ucina mi to co powinno być w nawiasach z niewiadomego powodu.
napiszę słownie:

while (dzien "mniejszy od" 1 "lub" dzien "większy od" 10);

snt.banzai

a dlaczego jest 10 a nie 7?

Roberciki

Chciałbym odczytać cały plik *.txt

napisałem program ale odczytuje jedną linie, bez względu na to czy wprowadzę "n" lub "t"...

/////////////////////////////////////////////////////////
import java.io.FileNotFoundException;
import java.io.File;
import java.util.Scanner;

public class Odczyt{
public static void main(String[] args) throws FileNotFoundException{
System.out.print("Podaj scieżke do pliku: ");
Scanner cmdOdczyt=new Scanner(System.in); // Uruchomienie Wpisu z klawiatury
String sOdczyt=cmdOdczyt.nextLine(); // Pobranie Wpisu z klawiatury z zapisem do zmiennej sOdczyt
File fSciezka= new File(sOdczyt); // Otwarcie pliku do odczytu
Scanner fPlik= new Scanner(fSciezka); // Odczyt z pliku
String qNastepna; // Zmienna z odpowiedzią na zapytanie

do{

String sPlik= fPlik.nextLine(); // Odczyt lini z pliku
System.out.print(sPlik); // Wyświetlenie odczytanej lini
System.out.print("\t/ Czy odczytać następną linie (t/n): "); //Zapytanie
Scanner cmdLinia=new Scanner(System.in); //Uruchomienie wpisu z klawiatury
qNastepna=cmdLinia.nextLine(); // Pobranie wpisu z klawiatury z zapisem do zmiennej qNastepna
}
while (qNastepna=="t"); // Jesli wpisano "t" to odczytuje nastepna linie
System.out.print("\n Wprowadzono:" + qNastepna); //Sprawdzenie wpisanego znaku

}
}
///////////////////////////////////////////////////////////////

SAK

Być może problem polega w zapisie porównania. Prawidłowo powinno by być
while (qNastepna.eqail("t");

Witek

Pętle while napisz w podobny sposób do tej, która odczytuje imiona z pliku.

while(odczyt.hasNextLine()){
Imiona = odczyt.nextLine();
System.out.println(Imiona);
}

Jędrzej

Mam kalkulator którego kod wygląda następująco:
///////////////////////////////////////////////////////////////
import java.util.Scanner;

public class Kalkulatron {
public static void main(String[] args) {
double L1, L2, L3;
String Dzialanie, wynik, D, M, O, T, t;
Boolean JeszczeRaz;
Boolean True = null;
Boolean False = null;
JeszczeRaz = True;
System.out.println("Siema Userze!");
while(JeszczeRaz == True){
System.out.println("Podaj dzialanie jakie chcesz wykonac:\nBaza danych obejmuje: \nDodawanie, Odejmowanie, Mnozenie\nTo ważne aby Dzialania byly z duzej litery i bez znakow polskich!\n");
Scanner odczyt = new Scanner(System.in);
Dzialanie = odczyt.nextLine();
System.out.println("daj Liczbe 1");
L1 = odczyt.nextDouble();
System.out.println("daj Liczbe 2");
L2 = odczyt.nextDouble();
D = "Dodawanie";
M = "Mnozenie";
O = "Odejmowanie";
wynik = "";
T = "T";
t = "t";
if(Dzialanie == D);{
L3 = (L2+L1);
wynik = (L2+"+"+L1+"="+L3);
}
if(Dzialanie == M);{
L3 = (L2*L1);
wynik = (L2+"*"+L1+"="+L3);
}
if(Dzialanie == O);{
L3 = (L1-L2);
wynik = (L2+"-"+L1+"="+L3);
}
System.out.println("Wybrales: "+Dzialanie);
System.out.println(wynik);
System.out.print("Dzieki za uzycie programu!\nA jeszcze jedno!Zakonczyc? (T\\N\\n\\t)");
wynik = odczyt.nextLine();
if (wynik == T);
{
JeszczeRaz = False;
}
if (wynik == t);{
JeszczeRaz = False;
}
}
}
}
////////////////////////////////////////////////////////////////////////
A konsola pisze mi takie coś:
///////////////////////////////////////////////////////////////////////
Siema Userze!
Podaj dzialanie jakie chcesz wykonac:
Baza danych obejmuje:
Dodawanie, Odejmowanie, Mnozenie
To ważne aby Dzialania byly z duzej litery i bez znakow polskich!

Mnozenie
daj Liczbe 1
2
daj Liczbe 2
2
Wybrales: Mnozenie
2.0-2.0=0.0
Dzieki za uzycie programu!
A jeszcze jedno!Zakonczyc? (T\N\n\t)Podaj dzialanie jakie chcesz wykonac:
Baza danych obejmuje:
Dodawanie, Odejmowanie, Mnozenie
To ważne aby Dzialania byly z duzej litery i bez znakow polskich!


///////////////////////////////////////////////////////////////////////////
Ma ktoś może jakiś pomysł\teorię???

pawels713

Na mój biust to powodem jest średnik w instrukcji if pomiędzy nawiasem ) zamykającym warunek a klamrą {,
którego nie powinno być. Czyli zamiast:
if(Dzialanie == M);{
powinno być
if(Dzialanie == M){

plolek

Dziwny idiom "na mój biust"
Myślisz, że kogoś po 2 latach dalej obchodzi rozwiązanie tego problemu?

pawels713

A z czym masz problem? Jeżeli rozwiązanie, które podałem jest nieprawidłowe, to je popraw. Po dwóch latach od publikacji nadal trafiają tutaj ludzie, którzy właśnie rozpoczęli przygodę z Javą - i to dla nich rozwiązanie problemu, który niedoświadczonemu może sprawić niezłą zagwozdkę.

Janosch

Piwo dla tego Pana! Nieważne, że tamta osoba pewnie rozwiązała swój problem 2 lata temu. Ważne jest to, że wszyscy nowi ludzi, którzy tutaj zaglądają mogą się czegoś dowiedzieć.

Jędrzej

Mam kalkulator którego kod wygląda następująco:
///////////////////////////////////////////////////////////////
import java.util.Scanner;

public class Kalkulatron {
public static void main(String[] args) {
double L1, L2, L3;
String Dzialanie, wynik, D, M, O, T, t;
Boolean JeszczeRaz;
Boolean True = null;
Boolean False = null;
JeszczeRaz = True;
System.out.println("Siema Userze!");
while(JeszczeRaz == True){
System.out.println("Podaj dzialanie jakie chcesz wykonac:\nBaza danych obejmuje: \nDodawanie, Odejmowanie, Mnozenie\nTo ważne aby Dzialania byly z duzej litery i bez znakow polskich!\n");
Scanner odczyt = new Scanner(System.in);
Dzialanie = odczyt.nextLine();
System.out.println("daj Liczbe 1");
L1 = odczyt.nextDouble();
System.out.println("daj Liczbe 2");
L2 = odczyt.nextDouble();
D = "Dodawanie";
M = "Mnozenie";
O = "Odejmowanie";
wynik = "";
T = "T";
t = "t";
if(Dzialanie == D);{
L3 = (L2+L1);
wynik = (L2+"+"+L1+"="+L3);
}
if(Dzialanie == M);{
L3 = (L2*L1);
wynik = (L2+"*"+L1+"="+L3);
}
if(Dzialanie == O);{
L3 = (L1-L2);
wynik = (L2+"-"+L1+"="+L3);
}
System.out.println("Wybrales: "+Dzialanie);
System.out.println(wynik);
System.out.print("Dzieki za uzycie programu!\nA jeszcze jedno!Zakonczyc? (T\\N\\n\\t)");
wynik = odczyt.nextLine();
if (wynik == T);
{
JeszczeRaz = False;
}
if (wynik == t);{
JeszczeRaz = False;
}
}
}
}

/////////////////////////////////////////////////////////////////////
A konsola pisze mi takie coś:
/////////////////////////////////////////////////////////////////////

Siema Userze!
Podaj dzialanie jakie chcesz wykonac:
Baza danych obejmuje:
Dodawanie, Odejmowanie, Mnozenie
To ważne aby Dzialania byly z duzej litery i bez znakow polskich!

Mnozenie
daj Liczbe 1
2
daj Liczbe 2
2
Wybrales: Mnozenie
2.0-2.0=0.0
Dzieki za uzycie programu!
A jeszcze jedno!Zakonczyc? (T\N\n\t)Podaj dzialanie jakie chcesz wykonac:
Baza danych obejmuje:
Dodawanie, Odejmowanie, Mnozenie
To ważne aby Dzialania byly z duzej litery i bez znakow polskich!


/////////////////////////////////////////////////////////////////////
Ma ktoś może jakiś pomysł\teorię???

Rastaman

Mam mały problem pomoże ktoś?

To co się tu nauczyłem wykorzystałem do zrobienia skryptu który raz zapyta o imię i będzie je pamiętać zawsze ale konsola każe mi dać średnik tam gdzie go nie może być mianowicie na początku pętli white:

While(daneone=="false"){
^
Raz zamieniłem klamre na średnik i wykryło 3 dziwne błędy a jak dałem średnik przed klamrą to 5 błędów nie wiem o co chodzi tu jest cały skrypt:

//==========================================================================================================================

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

//==========================================================================================================================
// ___ ___ __ ___
// | |__ |_ |
// | |__ __| |
//
//==========================================================================================================================

public class Test{
public static void main(String[] args) throws FileNotFoundException{

File one = new File("1.txt"); //----------------------------------//Odczytuje plik "1.txt"
Scanner im = new Scanner(file); //--------------------------------//Skanuje
Srting daneone = im.nextLine(); //--------------------------------//String daneone dostaje wartość pliku "1.txt"

While(daneone=="false"){ //-----------------------------------------//Rozpoczyna pętle sprawdzającął czy byłeś pytany o imie

System.out.println("Jak sie nazywasz?"); //-------------------------//Pyta o imie
String imieone; //--------------------------------------------------//Tworzy Stringa w którym poda się imie
Scanner odczyt = new Scanner(System.in); //-------------------------//Tworzy skaner który sprawdzi imie
imieone = odczyt.nextLine(); //-------------------------------------//Zapisuje imie w stringu "imieone"

PrintWriter zapisone = new PrintWriter("1.txt"); //-----------------//Włącza plik "1.txt"
zapis.println("true"); //-------------------------------------------//Zapisuje że imie zostało podane

PrintWriter zapisim = new PrintWriter("imie.txt"); //---------------//Włącza plik "imie.txt"
zapisim.println(imieone); //----------------------------------------//Zapisuje imie
} //--------------------------------------------------------------//Kończy pętle

System.out.println("Witaj "+imieone+" :)"); //-----------------------//Wysyła wiadomość powitalną
}
}

Slawek

while ma być z małej litery.

Łukasz

Czy pętla do ... while nie działa w połączeniu z innymi pętlami w tym samym programie?

szeri

Ja to zrobiłem z użyciem switcha.

package pl.javastart;
import java.util.Scanner;

public class While {

/**
* @param args
*/
public static void main(String[] args) {

Scanner odczyt = new Scanner(System.in);

System.out.println("Za ile sekund ma wybuchnąć bomba?: ");
int liczba = odczyt.nextInt();

System.out.println("Masz następujące rodzaje pętli:");
System.out.println("1. While");
System.out.println("2. do while");
System.out.println("3. for");

System.out.println("Podaj rodzaj pętli:");
int ktoraPetla = odczyt.nextInt();

switch (ktoraPetla) {
case 1:
while (liczba != 0) {
System.out.println("Zostało " + liczba + " sek.!");
liczba--;
}
System.out.println("BUUUUM!");
break;
case 2:
do {
System.out.println("Zostało " + liczba + " sek.!");
liczba--;
} while (liczba >= 0);
System.out.println("Buuuuuuuum!");
break;
case 3:
for (int doIlu = liczba; doIlu >= 0; doIlu--) {
System.out.println("Zostało " + liczba + " sek.!");
}
System.out.println("Buuuuuuuuuuum maximum!");
break;
default:
System.out.println("Nie wybrano zadnego z nastepujacych rodzajow.");
}
}

}

Mayson

Nie wiem czy ten temat był poruszany.
Wyprowadzając tekst na konsolę posługujesz się polskimi znakami diakrytycznymi. Jak je uzyskać w Windowsowej konsoli CMD.exe (u mnie są "robaczki")?

Jędrzej

Konsola ma inny zestaw znaków: o mniejszej ilości bitów.
Możesz napisać nową konsolę.☺

guest

witam!
a w jaki sposob sprawdzic poprawnoc danych?
zalozmy, ze program pobiera od uzytkownika wzrost, ktory nie moze byc <=0.
Jak spowodowac aby program nie puscil go dalej dopoki poprawn wartosc nie zostanie podana?

Witek

Witam
Możesz skorzystać z warunku np.: wzrost = 170 i teraz warunek

if( wzrost > 170)
System.out. println(„Podany wzrost jest za duży, wprowadź ponowny wzrost”);

Jeżeli użytkownik wprowadzi za duży wzrost to warunek to wychwyci i poprosi użytkownika o podanie ponownie wzrostu. Tak najprościej można to zrobić.

guest

No tak to jest oczywiste. Z tym ze jak zagniezdzic ten kod aby ten komunikat byl zaraz po wprowadzeniu tej konkretnej danej.

System.out.println("Podaj swoj wzrost: ");
Scanner odczyt3 = new Scanner(System.in);
wzrost = odczyt3.nextDouble();

Kelzaer

Możesz spróbować w ten sposób:

Scanner odczyt = new Scanner(System.in);
System.out.print("Podaj swój wzrost: ");
double t = odczyt.nextDouble();

do {
System.out.println("Błędna wartość!");
System.out.print("Podaj swój wzrost: ");
t = odczyt.nextDouble();
} while (t<=0);


Pozostaje jeszcze kwestia zabezpieczenia przed wprowadzeniem wartości innej niż double (czyli liter i innych znaków)

Kelzaer

Powinno być w tę stronę:

while (t<=0) {
System.out.println("Błędna wartość!");
System.out.print("Podaj swój wzrost: ");
t = odczyt.nextDouble();
}

W przeciwnym razie info o błędzie wykona się zawsze, przynajmniej jeden raz ;)

daria

potrzebuje pomocy. napisałam program i brakuje mi tylko fragmentu który bedzie pytał użytkownika czy ten chce jeszcze korzystać z programu czy chce go zakończyć. może ktoś i podpowiedzieć jak to zrobić??

Witek

Witam
Warunek może dać zaraz po odczycie czyli:

wzrost = odczyt3.nextDouble();

if( wzrost > 170)
System.out. println(„Podany wzrost jest za duży, wprowadź ponowny wzrost”);

Dawid

public class Odczyt{
public static void main(String[] args){
int licznik = 0;

do{
System.out.println("To jest petla");
licznik++;
}
}
}

Jak to zatrzymać??

Witek

Witam
Brakuje Ci zakończenia działania petli
} while( tu wstaw jakiś warunek, aby zatrzymać działanie pętli);

Arzippo

Mam pytanie, a w trzeciej metodzie z "for" tam gdzie jest for(int i=0; i<10; i++){ musi być i czy może być dowolna inna litera, np. for(int x=0; x<10; x++)?

Sławek Ludwiczak

oczywiście może być dowolna litera. Zazwyczaj w programowaniu jako licznik przyjmuje się "i", później j, k itd. (np jeśli mamy kilka pętli zagnieżdżonych).

Małgosia

Czym się różni to:
int a;
a=odczyt.nextInt();
od tego:
int a=odczytnextInt();
?

Sławek Ludwiczak

W praktyce to niczym :)

Kuba

Sławku,

chyba nikt nie zwrócił na to do tej pory uwagi (albo ja nie doczytałem), ale w podanym przez Ciebie "zadaniu domowym" odliczanie ma być do 0, natomiast w rozwianiu przedstawionym przez Ciebie zegar odlicza do 1 i potem "BUM". powinieneś dać warunek pętli
zegar>=0
a nie
zegar>0

Robert

A wie ktoś jak można zobić, żeby odliczanie nie było automatyczne 'szybkie' w dół tylko cyfry pojawiały się co sekundę na przykład?

Marcin Kunert

Po każdym System.out.print() dodaj try { Thread.sleep(1000); } catch(Exception e) {}
Instrukcja sleep uśpi aktualny wątek na sekundę.
Blokiem try{} catch(){} na razie się nie przejmuj, dowiesz się o nim w dalszej części kursu. Po prostu przepisz jak jest :)

szumal

Dolaczam sie do powyzszego pytania

Konrad

Hej pokarze ktoś jak zrobić żeby te wszystkie napisy w pętli pojawiały się co określony czas np. 1 sekundę???

Ignacy

Komentarz wyżej wszystko wyjaśnia, ale jak chcesz to wkleję kod ;)

import java.util.Scanner;

public class Bomba3{
public static void main(String[] args){

System.out.println("Podaj liczbę... :D");
Scanner odczyt = new Scanner(System.in);

for(int liczba = odczyt.nextInt(); liczba>0; liczba--){
System.out.println("Bomba wybuchnie za "+liczba);

try{
Thread.sleep(1000);
}
catch(Exception e){
}
}
System.out.println("BUM!");
}
}
//KONIEC KODU
//Kod na podstawie #30 komentarza

W pętli po System.out.println() dopisujesz poniższe dwie instrukcje, tak jak na kodzie:

try{
Thread.sleep(1000);
}

catch(Exception e){
}

Jeśli chcesz opóźnić lub przyśpieszyć czas odliczania, to w instrukcji Thread.sleep(1000) liczbę w nawiasie zmień na jakąś inną, np. 1 odpowiada 0,001 sekundy, więc 10000 odpowiada 10 sekundom.
Mam nadzieję, że pomogłem. Pozdrawiam :)

Adam

Mógłby mi ktoś wytłumaczyć o co tutaj chodzi z tymi pętlami? do tej pory wszystko kapuje ale tego nie mogę zrozumieć

lolo

Pętle służą do wykonywania jakiejś czynności określoną ilość razy.
Np. zamiast pisać 100 linijek wypełniających tablice. Piszemy tylko kilka wykorzystując pętlę for.
Innym przykładem może byś wykorzystanie pętli w pisaniu np. kalkulatora, gdzie za pomocą pętli while możemy zapętlić program tak, że po wykonaniu działania pyta użytkownika czy chce wykonać jeszcze jakąś operację czy zakończyć pracę z programem.
Mam nadzieję, że pomogłem

tom

wpisuje ten kod:

public class LicznikC{
public static void main(String[] args){
for (int i=0; i<0; i++){
System.out.println("petla");
}
System.out.println("KOniec");
}
}

i wyswietla mi tylko ostatnia linijke "KOniec" bez odliczania "petla"x10
wszystko jest OK kiedy kopiuje kod ze strony. Wydaje mi sie ze moj jest identyczny. Czy cos pomijam?

z gory dziekuje za odpowiedz

lolo

W lini
for (int i=0; i<0; i++){
zmień i<0 na i<10

Andrzej

Jak zrobić aby to co pojawiło się w konsoli zapisało się w pliku?

Hubo

Witam, mam pytanie - jak powinna wyglądać pętla wyświetlająca kolejne liczby ale tylko podzielne przez dwa lub trzy?

lolo

Masz tablicę n elementową i chcesz wyświetlić z niej tylko te podzielne przez dwa lub trzy?
Jeśli tak to musisz stworzyć pętlę która "przejdzie" całą tablicę i sprawdzi po kolei czy dana liczba jest podzielna przez 2 lub 3 i wyświetlenia jej.

Hubo

co musz zrobic to wiem, nie wiem tylko jak to ma w kodzie wygladac.

lolo

Nie lepiej się samemu pogłowić niż brać gotowca?


System.out.println("liczby podzielne przez 2 lub 3 znajdujące się w tablicy to: ");
for( int i =0; i<=tab.lenght;i++){
if(tab[i]%2=0) System.out.print(tab[i]+" ");
if(tab[i]%3=0) System.out.print(tab[i]+" ");
}

Adam

Kto pomoże ale nie wysyłając gotowy kod tylko podpowie jak to zrobić "wykorzystując pętlę for napisz program który wyswietli liczby od 1 do 10 podzielone przez 2

lolo

Zacznij od napisania pętli która przejdzie po kolei od 1 do 10. Następnie dodaj w pętli warunek sprawdzający czy liczba jest podzielna przez 2 jeśli tak to ją wyświetl jeśli nie to nic nie rób niech pętla sprawdza kolejną liczbę.

Radek

import java.util.Scanner;

public class Tablica {
public static void main(String[] args){
System.out.println("Podaj ilość elementów: ");
Scanner read=new Scanner(System.in);
int a = read.nextInt();
int[] tablice = new int[a];
for (int i = 0; i<a; i++)
tablice [i] = i+1;
int licznik=0;
while(licznik<a){
System.out.print(tablice[licznik]+" ");
licznik++;
}

}
}
Ja napisałem to tak, ale uważam jednak, że z pętlą for jest łatwiej

Radek

Sorry. Nie wkleiłem to tam gdzie trzeba ;)

Bartosz

Siema dlaczego, wyskakuje mi błąd? Pomożesz? Chciałbym żeby progam wypisywał liczbe czyli zmienną na ekranie :D Liczbe oczywiście wybiera użytkownik ;)

import java.util.Scanner;


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


while(liczba=0){
System.out.println(liczba);
liczba=liczba-1;
}
System.out.println("Koniec");
}
}

Maciek

while(liczba != 0){

W podanym przez Ciebie kodzie, pętla while wykonywana jest tylko gdy podana liczba wynosi 0. Jak rozumiem po dekrementacji mają zostać wyświetlone wszytkie liczby od podanej w dół, bez zera. "Ładniejszy" kod otrzymasz gdy zamiast liczba=liczba-1; napiszesz liczba--; (dwa minusy). Taki bardziej 'pro' będzie ;)

pracownik Microsoftu

napiszcie mi kod do zrobienia programu którego nie mam treści