• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - problem z pętlą do while

0 głosów
420 wizyt
pytanie zadane 2 grudnia 2020 w Java przez nexyz Nowicjusz (210 p.)

Hej, mam problem z pętlą do while w Javie, być może po prostu "przysnąłem" na lekcji i piszę z prawdopodobnie oczywistą rzeczą, a mianowicie w poniższych kodach mam problem: w pierwszym kodzie po wpisaniu 0 oprócz "Podałeś 0" pojawia się również "Ta liczba jest większa od zera". W drugim chciałbym dowiedzieć się w jaki sposób program ma zakończyć działanie po wpisaniu np. czterech liczb. Kody prawdopodobnie nie są w doskonałej formie, jeżeli macie jakieś uwagi chętnie posłucham.

package zadania;

import java.util.Scanner;

public class zad1a {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int a;
		do
		{
			System.out.print("Podaj liczbę: ");
			a = input.nextInt();
			if (a<0)
			{
				System.out.println("Ta liczba jest mniejsza od zera");
			}
			else
			{
				System.out.println("Ta liczba jest większa od zera");
			}
		

		 }  while (a!=0);
			System.out.print("Podałeś 0");
		input.close();
		} 
			
	}
package zadania;

import java.util.Scanner;

public class zad1b {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int l = -5;
		int h = 5;
		int n;
		int a;
		System.out.print("Podaj ilość liczb: ");
		n = input.nextInt();
		do
		{
			System.out.print("Podaj liczbę: ");
			a = input.nextInt();
			if (a >= l && a <= h)
			{
				System.out.println("Podałeś liczbę z przedziału <-5,5>");
			}
			else
			{
				System.out.println("Podałeś liczbę spoza przedziału <-5,5>");
			}
			
		} while (!(a >= l && a <=h));
		
		
	}

}

Z góry dziękuję za wszystkie odpowiedzi!

3 odpowiedzi

0 głosów
odpowiedź 2 grudnia 2020 przez Wiciorny Ekspert (283,300 p.)
wybrane 2 grudnia 2020 przez nexyz
 
Najlepsza

Istota jest tutaj pętli do - > while. 
Czym się różni od zwykłej while? Tym że warunek podany :

while (a!=0);

wykona się po pierwszym przejściu "do" -> bo najpierw jest rób- > potem do póki ... coś, więc ten warunek zatrzyma po wykonaniu pierwszych instrukcji warunkowych dla "do" 
A w tych instrukcjach warunkowych masz : 

if (a<0)
            {
                System.out.println("Ta liczba jest mniejsza od zera");
            }
            else
            {
                System.out.println("Ta liczba jest większa od zera");
            }

Aktualnie : a jest mniejsze od zera? No nie jest ... bo jest równe a to nie to samo, więc wykonuje się 'else' pozostałość, dodatkowo wykonuje się Print konćowy, dlatego że nie obejmuje on warunku while i znajduje się na dole. 

System.out.print("Podałeś 0");

Gdybyś zmienił warunek ifa np na   

if (a<=0)

to wykonało by sie  System.out.println("Ta liczba jest mniejsza od zera");
dlatego, ze warunek byłby spełniony bo 0 = jest 0 
mam nadzieje że w ten sposób pomogłem i co nie co wyjasniłem, pamiętaj "do" wykona się bez sprawdzenia warunku pętli dopiero warunek zostanie spełniony PO PIERWSZYM PRZEJŚCIU 

0 głosów
odpowiedź 2 grudnia 2020 przez Borys0 Początkujący (400 p.)
System.out.print("Podałeś 0");

Ta instrukcja wykona się zawsze niezależnie od tego jaką liczbę podasz. Musiałbyś użyć warunku tak samo jak w przypadku "Ta liczba jest...".

 

Nie za bardzo rozumiem co chcesz osiągnąć w drugim przypadku. Aktualnie, jeżeli zostanie podana liczba spoza przedziału, to pętla wróci do początku. Warunek, który zawiera się w nawiasie po while wpływa na to, czy pętla wykona się jeszcze raz, jeżeli wynikiem tego warunku jest true, to pętla wróci do początku.

komentarz 2 grudnia 2020 przez Wiciorny Ekspert (283,300 p.)

Aktualnie, jeżeli zostanie podana liczba spoza przedziału, to pętla wróci do początku

to jest tutaj akurat takie "zastosowanie :D moim zdaniem prostoty" komplikując, w ten sposób uzyskujesz to, że jeśli wprowadzona liczba z poza przedziału jest to  jest błąd, dlatego pewnie ma wrócić się do wykonywania pęli i powinna być opcja np "podania ponownie prawidłowej wartości, jednak ... wtedy sens nie ma sama pętla " założenie jakieś było... przez autora ale się zbyło  jednak "do" wykona się zawsze więc generalnie też nie rozumiem sensu, bo program i tak wykona zawsze się raz co tez mnie zastanawia po co faktycznie tu by nawet ta negacja była warunkowa 

0 głosów
odpowiedź 2 grudnia 2020 przez JakSky Stary wyjadacz (14,770 p.)

Co do pierwszego... To działa to prawidłowo.

Zasada działania jest taka:

if (a<0)// a ma wartość 0, więc ten warunek nie jest prawdą-zwróci false
            {
                System.out.println("Ta liczba jest mniejsza od zera");
            }
            else//skoro if zwrócił false, wykona się blok else
            {
                System.out.println("Ta liczba jest większa od zera");
            }

 

Podobne pytania

0 głosów
1 odpowiedź 579 wizyt
pytanie zadane 24 lipca 2021 w C i C++ przez Bartusio445 Początkujący (290 p.)
0 głosów
1 odpowiedź 292 wizyt
pytanie zadane 8 października 2020 w C i C++ przez Filip325 Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 515 wizyt
pytanie zadane 4 listopada 2016 w C i C++ przez vega Użytkownik (510 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,326 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...