Wpis z mikrobloga

Mirki mam taki kod:

public class MyPrimeVerifier {

public static boolean isPrime(int liczba) throws Exception {

for (int i = 2; i < liczba-1; i++) {
if(liczba % 2 == 0){
throw new Exception("Liczba nie jest pierwsza");
}
}
return true;
}
}

Problem polega na tym że nieważne jaka liczbę wrzucę do metody zawsze wywala mi exception. Jednak gdy zmienną "liczba" w ifie zamienię na jakąkolwiek zmienną zainicjowaną w klasie MyPrimeVerifier wtedy już wszystko gra. Ktoś potrafi wytłumaczyć o co chodzi?

#naukaprogramowania #java
  • 18
@Fiver: jeżeli wiesz, dlaczego będzie działać kod, który zaraz napiszę, to możesz też śmiało zrobić warunek i <= liczba / 2 albo i <= Math.sqrt(liczba) - to tak odnośnie optymalizacji.
@Fiver: ten kod jest zły, 21 nie dzieli się przez 2, a nie jest pierwszą. Pętla powinan iść od 2 do 'liczba' i następnie dzielić 'liczba' przez 'i' i sprawdzać czy jest reszta 0 (chociaż raz), jak jest 0 - return od razu i tyle.
@Piotrp7: Dziąki za protip odrazu łatwiej rozkminiać co się dzieje w pętli.
@LowcaG: W treści zadania jest napisane że mam podnieść wyjątek jeśli liczba nie jest liczbą pierwszą.
W treści zadania jest napisane że mam podnieść wyjątek jeśli liczba nie jest liczbą pierwszą.


@Fiver: aaa to jest zadanie. (kiepskie ;) )

A moze chodziło o metodę isPrime (która zwraca true/false)
a dopiero jak jest false to rzucasz wyjątek.

tak z ciekawości czego to zadanie ma uczyć? wyjątków, czy sam algorytm ma być jakąs wartościa dodaną?
@LowcaG: To jest jedno z 4 połączonych ze sobą zadań. Z tą treścią zadania to nie jestem pewien czy chodzi o zwykłe zwrócenie true i false tak jak piszesz czy żeby zwracało wyjątek, dla treningu zrobiłem oba przypadki.