Obliczanie liczby pierwszej własny projekt

0

class LiczbaPierwsza {
	boolean pierwsza = false;
	int licznik = 0;

	public void ObliczToGowno(int min, int max) {
		while (min < max) {
			if (min == 2 || min == 3 || min == 5 || min == 7) {
				System.out.println("Znaleziono liczbę pierwszą: " + min);
				licznik++;
			}
			if (min % 2 == 0 || min % 3 == 0 || min % 5 == 0 || min % 7 == 0) {
				pierwsza = false;
			} else {
				System.out.println("Znaleziono liczbę pierwszą: " + min);
				licznik++;
			}
			min++;
		}
		System.out.println("Jest: " + licznik + " liczb pierwszy w przedziale od: " + min + " do: " + max);
	}
}

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

		LiczbaPierwsza lp = new LiczbaPierwsza();
		lp.ObliczToGowno(2, 100);
	}
}

Jestem samoukiem języka Java, coś tam staram sobie tworzyć od kilku miesięcy.
Dzisiaj postanowiłem trochę podstawowych wyliczeń sobie przećwiczyć.
Wszystko fajnie, ale jednak na końcu gdy program zwraca Stringa : Jest: " + licznik + " liczb pierwszy w przedziale od: " + min + " do: " + max, to min dalej ma wartość 100.
Da się coś z tym zrobić?

Proszę o opinie na temat kodu, może jest trochę toporny, ale według mnie wydaje się całkiem zrozumiały pod względem działania.

0

min ma wartość 100 dlatego że jest inkrementowany w pętli. Możesz stworzyć dodatkową zmienną w metodzie ObliczToGowno() ( :D ) aby zachować oryginalną wartość min.

Albo możesz to zrobić jeszcze tak:

public void ObliczToGowno(int min, int max) {
	System.out.print("W przedziale " + min + " - " + max " znajduje się: "); // Ważne - tutaj używasz print, nie println
	{ ... } // Tutaj obliczanie ile jest liczb pierwszych
	System.out.println(licznik + " liczb pierwszych");
}
0

Mhmm no właśnie tak myślałem, że trzeba dodać inną zmienną.
Dzięki za szybką odpowiedź :)
Skorzystam z Twojego rozwiązania, nie pomyślałem o tym.

0

Ten kod działa tylko do twojego przedziału z kodu. Przy liczbie 121 by się "wysypał". Sam jestem ciekaw jak to rozwiązać przy większych przedziałach. Również zmienna pierwsza jest zbędna i można ją usunąć (IDE powinien podkreślić tą zmienną).

0

@Kapsel94:

class Wyliczenia{
	public void ObliczLiczbePierwsza() {
		boolean pierwsza;
		
		
		for (int i = 2; i <= 100;  i ++ )
		{
		pierwsza = true;
		
		for (int j=2; j<= i/j; j++)
			
			if( (i%j==0)){
				pierwsza = false;
			}
				if(pierwsza)
				System.out.println("Liczba pierwsza: " +i);
				
			
		}
		
	}
}
public class KlasaGlowna {
	public static void main(String[] args) {
		
		Wyliczenia lp = new Wyliczenia();
		lp.ObliczLiczbePierwsza();
	}

}

Taką wersję programu znalazłem w książce z której się uczę.
Ta działa dobrze, rzeczywiście, w tamtej od pewnego momentu był błąd, bo po prostu wielokrotności nie brało 11, 13 itp.

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