Moje pytanie związane jest z następującego kodu:Stosując logikę wewnątrz instrukcji switch
public static void main(String[] args) {
// Find Prime Numbers from 0 to 100
int i;
for (i=2; i <= 100; i++) {
int j = 2;
boolean iPrime = true;
//The following line gives incorrect results, but should execute faster
// while ((iPrime = true) && (j < (i/2 + 1))) {
//The following line gives correct results but performs un-necessary operations
//by continuing to calculate after the number is found to be "not prime"
while (j < (i/2 + 1)) {
j++;
if ((i % j) == 0) {
iPrime = false;
//System.out.println(j + " is a factor of " + i);
}
}
if (iPrime) {
System.out.println(i + " is a prime number!");
}
}
}
Teraz, jak już zauważył w kodzie, co staram się osiągnąć to szybciej realizacja mojego programu poprzez wykonanie pętli "while" tylko wtedy, gdy iPrime = true. 50% liczb jest podzielnych przez 2, a więc po ustaleniu, obliczenia mogą się zatrzymać.
robię ten projekt jako część „przykład” dla początkujących z książką, faktycznie staram się obliczyć do 1000000 jak najszybciej po prostu dla własnej „ekstra kredytu” ...
czytałem, że „zwarcia«i»operator” & & ocenia tylko drugą połowę rachunku, jeśli pierwsza połowa jest prawdą, jeśli jest fałszywe, dwa nie są oceniane przed siebie (oszczędność CPU)
I to również zakończy pętlę, co pozwoli zaoszczędzić jeszcze więcej procesora ...
Ale dla som Powód, nie działa poprawnie! Dodałem więcej instrukcji System.out.println(), wymieniając czym jest "iPrime" - a wynik jest dziwny ... Włącza i wyłącza iPrime i ocenia każdy numer, którego nie rozumiem.
Dzięki za pomoc wszystkich! To było takie oczywiste, gdy dostałem twoje odpowiedzi, a sito Eratostenesa byłoby znacznie lepszym algorytmem! Mogę wybrać tylko jedną odpowiedź, ale wszyscy byliście tak samo pomocni, dziękuję! – JBainesy