Meine Frage bezieht sich Mit Logik:den folgenden Code in einer switch-Anweisung
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!");
}
}
}
Jetzt, da ich in dem Code kommentiert habe, was ich versuche, ist eine schnellere Ausführung meines Programms zu erreichen, indem Sie die while-Schleife nur ausführen, wenn iPrime = true ist. 50% der Zahlen sind durch 2 teilbar. Sobald dies festgestellt ist, können die Berechnungen beendet werden.
Ich mache dieses Projekt als Teil eines ‚Beispiel‘ Anfänger aus einem Buch, ich versuche tatsächlich 1000000 zu berechnen so schnell wie möglich, nur für meinen eigenen „extra credit“ ...
Ich lese, dass der "Kurzschluss" und "Operator" & & nur die zweite Hälfte der Aussage wertet, wenn die erste Hälfte wahr ist, wenn es falsch ist, werden die beiden nicht gegeneinander ausgewertet (speichern CPU)
Und es wird auch die Schleife verlassen, die noch mehr CPU sparen wird ...
Aber für etwas Der Grund, es funktioniert nicht richtig! Ich habe mehr System.out.println() Anweisungen überall, auflisten, was "iPrime" ist - und die Ausgabe ist seltsam ... Es schaltet iPrime ein und aus und wertet jede Zahl aus, die ich nicht verstehen kann.
Danke für die Hilfe aller! Es war so offensichtlich, sobald ich Ihre Antworten bekam, und das Sieb von Eratosthenes wäre in der Tat ein viel besserer Algorithmus! Ich kann nur eine Antwort wählen, aber Sie waren alle genauso hilfreich, danke! – JBainesy