Pętla while - program działa bez końca

0

Coś mi umyka tylko nie wiem co, program w nieskończoność pobiera liczby :

import java.util.*;


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

			{
			
			Scanner in = new Scanner (System.in);

			

				int a = in.nextInt();
				int b = in.nextInt();
				
				while (a != b)
				{
					if (a > b) b += b;
					else a += a;
				}
				
								
	
			in.close();

			}
}


0

to w końcu w czym problem - nie kończy się, czy pobiera liczby cały czas?

0

Jedno z drugiego wynika, jeżeli wpisze 2 takie same liczby to kończy się, a jeżeli 2 różne to non stop pobiera liczby

0

to poprzez warunek w pętli, prawie żadne liczby Ci się nie pokryją, program będzie działał cały czas. Spróbuj wpisać liczby 1 i 2 to wtedy sie skonczy, ale inne to możesz swobodnie pisać, ale i tak się nie skończy. Po pętli dodaj sobie: system.out.println("A " + a + " B" + b); i testuj :)

0

Każde 2 liczby mają najmniejszą wspólną wielokrotność, pętla musi się kiedyś skończyć. Problem jest w tym że cały czas program pyta o liczby, a strumień wejścia jest poza pętlą, więc dlaczego pyta o pobranie liczb?

0

Robisz coś takiego, że za każdym razem mnożysz te liczby przez 2, a nie dodajesz tą początkową tworząc kolejne wielokrotności.
Musisz zapisać sobie te wczytane liczby w osobnej zmiennej i je dodawać, nie modyfikować ich.

0

nie tak się oblicza najmniejszą wspólną wielokrotność, NWW(a,b) = (a*b)/nwd(a,b)
gdzie nwd to największy wspólny dzielnik, a i b to liczby podane przez użytkownika
spróbuj sobie rozpisać dla 5 i 4 działanie twojego programu

5 -> 10 -> 20
4->8 -> 16 -> 32

0
Sopelek napisał(a):

Robisz coś takiego, że za każdym razem mnożysz te liczby przez 2, a nie dodajesz tą początkową tworząc kolejne wielokrotności.
Musisz zapisać sobie te wczytane liczby w osobnej zmiennej i je dodawać, nie modyfikować ich.

W końcu :D, dzięki. Niby taki mały błąd a krwi może napsuć :D Najlepsze rozwiązanie to wprowadzenie 2 dodatkowych zmiennych?

0

Cos w tym stylu mysle:

public static int nwd(int x, int y) {
	while (x != y) {
	if (x > y)
		x -= y;
	else
		y -= x;
	}
	return x;
}
0

Jeszcze jedno pytanie, bo już któreś z kolei ( pewnie 4 ) zadanie biorę ze spoja, rozwiązuje tak jak trzeba, wyniki są poprawne a nie chce mi ich zaliczyć, ten algorytm nawet tesowałem ideone i dalej coś nie działa, tak go poprawiłem (nazwe zmieniam ofc firstprogramm na Main) :

import java.util.*;


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

			{
			
			Scanner in = new Scanner (System.in);

				int n = in.nextInt();
				
				for ( int i = 0; i < n; i++)
				{

				int a = in.nextInt();
				int b = in.nextInt();
				
				int c = a;
				int d = b;

				while( c != d)
				{
					if ( c > d) d += b;
					else c += a;
				}
			
				System.out.print(c);
				}				
	
			in.close();

			}
}


 
0

Może być za wolny, może być coś innego.
Najlepiej daj link do zadania i napisz dlaczego nie chce przyjąć.

0

http://pl.spoj.com/problems/PRZEDSZK/
Powód : błędna odpowiedź

0

na pewno nie powinieneś tam mieć println zamiast print?

0
 
	int a = 5;
	int b = 9;
	for (int i = a; a != b ; )
	{
		static int  j = b;
		if (a > b) b += j;
		else a += i;

	}

Ta, ale warto ograniczyć ich widoczność jakimś sposobem, przynajmniej moja programistyczna etykieta tak mówi nie wiem jak innych. Btw. To nie najlepszy sposób na szukanie NWW

EDIT:
Sorry, zapomniałem to java static nie podziala-,-

0

Przeciez NWW to nic innego jak (x*y)/NWD(x,y)

Wyzej napisalem Ci NWD

1 użytkowników online, w tym zalogowanych: 0, gości: 1