• 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

VPS Starter Arubacloud
0 głosów
198 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 (269,120 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 (269,120 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ź 207 wizyt
pytanie zadane 24 lipca 2021 w C i C++ przez Bartusio445 Początkujący (290 p.)
0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 8 października 2020 w C i C++ przez Filip325 Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 239 wizyt
pytanie zadane 4 listopada 2016 w C i C++ przez vega Użytkownik (510 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...