Aceasta e o versiune anterioară a paginii.


Structura repetitivă while

De multe ori avem nevoie să repetăm anumite instrucţiuni. Când acesta este cazul, putem folosi un while care se va executa cât timp o condiţie este adevărată.

Sintaxa generală este:

while (conditie) {
    instructiuni;
}

La fel ca la structura if, condiţia trebuie să fie o valoare booleană (true sau false), iar instrucţiunile pot fi oricât de multe.

int k = 0;
while (k < 30) {
    System.out.println(k);
    k++;
}
// se vor afisa primele 30 de numere, incepand cu 0

Putem avea mai multe mecanisme şi condiţii mai complexe la while, dar pentru moment nu intrăm în detalii. Singurul mecanism care mai este prezentat este cel pentru while(true) care execută ceva la infinit. Acesta poate fi oprit la apelul instrucţiunii break;, în cazul în care punem o condiţie ce rezultă în ceva adevărat.

Codul de mai sus rescris cu un astfel de mecanism arată în felul următor.

int k = 0;
while (true) {
    if (k == 30) {
        break; // opreste executia lui while
    }
    System.out.println(k);
    k++;
}
// se vor afisa primele 30 de numere, incepand cu 0

Exerciţii

1. Salvaţi o valoare între 1 şi 10 într-o variabilă. Încercaţi să ghiciţi numărul prin introducerea unei valori de la tastatură. Afişaţi mesaje diferite dacă numărul este mai mare, mai mic sau dacă l-aţi ghicit.

Exemplu consolă

Ghiciti un numar intre 1 si 10.
Introduceti numarul: 3
Numarul cautat este mai mare!
Introduceti numarul: 8
Numarul cautat este mai mic!
Introduceti numarul: 6
Felicitari! Ati ghicit numarul!

Soluţie

Soluţie

import java.util.Scanner;
 
public class Whiles {
 
    public static void main(String[] args) {
        int numar = 20;
        System.out.println("Incearca sa ghicesti numarul!");
        Scanner sc = new Scanner(System.in);
        int ghicit = sc.nextInt();
        while (ghicit != numar) {
            System.out.println("Nu ai ghicit numarul!");
            if (numar > ghicit) {
                System.out.println("Numarul cautat este mai mare");
            } else {
                System.out.println("Numarul cautat este mai mic");
            }
            ghicit = sc.nextInt();
        }
        System.out.println("Felicitari! Ai ghicit numarul!");
    }
 
}

2. Scrieţi un program care să facă suma unor numere întregi introduse de la tastatură. Suma va fi afişată la fiecare pas. Programul se va opri când se va introduce valoarea 0.

Soluţie

Soluţie

import java.util.Scanner;
 
public class Whiles {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int suma = 0;
        while (true) {
            int nr = sc.nextInt();
            if (nr == 0) {
                break;
            }
            suma += nr;
            System.out.println("Suma partiala este " + suma);
        }
        System.out.println("Suma finala este " + suma);
    }
 
}

3. Introduceţi un număr întreg de la tastatură. Afişati cifrele acestuia.

Soluţie

Soluţie

import java.util.Scanner;
 
public class Whiles {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int numar = sc.nextInt();
        while (numar != 0) {
            int cifra = numar % 10;
            numar = numar / 10;
            System.out.println("Cifra numarului este: " + cifra);
        }
    }
}

Discussion

, 2016/01/26 07:14

A se vedea mai jos o rezolvare ptr exercitiul 3, dar mai putin matematica :

public static void main(String[] args) {
	
	System.out.println("Introduceti un numar !");
	Scanner sc= new Scanner(System.in);
	String numarStr= sc.next();
	int i=0;
	System.out.println("Numarul este "+numarStr);
	while (i<numarStr.length()){
		 System.out.print(numarStr.charAt(i)+" ");
		i++;
	}
}
, 2016/01/25 18:32

Buna seara, v-as ruga sa imi explicati logica celor ultime randuri din Solutia exercitiului al 3 - lea: "int cifra = numar % 10;

          numar = numar / 10;"

Multumesc

, 2016/01/25 19:30

Ca sa separam cifrele unui numar, sa zicem 1234, cea mai simpla metoda este operatia modulo (%), care ne returneaza doar restul unei impartiri. Astfel, cu % 10, vom obtine intotdeauna ultima cifra:

1234 % 10 = 4

Pentru a obtine toate cifrele unui numar, trebuie sa repetam operatiunea si este necesar sa eliminam ultima cifra, pe care am obtinut-o anterior cu modulo. Pentru a "sterge" ultima cifra, folosim acum operatia de impartire la 10, cu care obtinem numarul intreg, fara rest:

1234 / 10 = 123

Iar de acum trebuie doar repetati pasii modulo, respectiv impartire, pana la prima cifra. In acel moment, cand numarul ajunge la 1, operatia de impartire va returna 0, iar astfel, conditia buclei while nemaifiind "true", bucla se intrerupe.

You could leave a comment if you were logged in.