La mia domanda è legata al seguente codice:Usando la logica all'interno di un'istruzione 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!");
}
}
}
Ora, come ho commentato nel codice, quello che sto cercando di realizzare è un esecuzione più veloce del mio programma eseguendo il ciclo 'while' solo quando iPrime = true. Il 50% dei numeri è divisibile per 2 e quindi una volta stabilito questo i calcoli possono fermarsi.
sto facendo questo progetto come parte di un principiante 'esempio' da un libro, io in realtà sto cercando di calcolare fino a 1000000 nel minor tempo possibile solo per il mio "credito extra" ...
ho letto che il "corto circuito 'e' operatore" & & rileva solo la seconda metà della dichiarazione se la prima metà è vero, se è falso, i due non vengono valutati contro l'altro (CPU risparmio)
E uscirà anche il ciclo, che salverà ancora più CPU ...
Ma per som La ragione, non funziona correttamente! Ho messo più istruzioni System.out.println() in tutto, elencando cosa sia 'iPrime' - e l'output è strano ... Commuta e spegne iPrime e valuta ogni numero, che non riesco a capire.
Grazie per l'aiuto di tutti! E 'stato così ovvio una volta che ho avuto le tue risposte, e il setaccio di Eratostene sarebbe davvero un algoritmo decisamente migliore! Posso solo scegliere una risposta ma siete stati tutti altrettanto utili, grazie! – JBainesy