Ten kod działa zgodnie z oczekiwaniami? Skie „Średnia ilość tras: 0,99864197”pobliżu pustej Java dla pętli działa dziwnie
import java.util.Random;
public class A {
public static void main(String[] args) {
int min = -30;
int max = 1;
test(min, max);
}
static void test(int min, int max){
int count = 0;
Random rand = new Random(0);
for(int j = 0; j < 2097152; j++){
int number = min + rand.nextInt(max-min+1);
for(int i = 0; i < number; ++i) {
System.out.print("");
count++;
}
}
System.out.println("Average Number of Runs: " + count/65536F);
}
}
ten kod, który należy wydrukować dokładnie taki sam numer, ale zamiast tego wyświetla losową liczbę ujemną .
import java.util.Random;
public class A {
public static void main(String[] args) {
int min = -30;
int max = 1;
test(min, max);
}
static void test(int min, int max){
int count = 0;
Random rand = new Random(0);
for(int j = 0; j < 2097152; j++){
int number = min + rand.nextInt(max-min+1);
for(int i = 0; i < number; ++i) {
//System.out.print("");
count++;
}
}
System.out.println("Average Number of Runs: " + count/65536F);
}
}
Czy istnieje pewna optymalizacja, która dzieje się w java dla pętli?
Uwagi:
- Używam jdk1.6.0_45.
- W normalnym użyciu nowy losowy miałby lepsze ziarno.
- min i max powinny być dowolną liczbą.
Wydaje mi się, że pamiętam, że jest to duplikat, ale podejrzewam, że nie będę mógł go znaleźć. * Myślę * że jest to błąd JIT w wersji 1.6, który został naprawiony w Javie 7. Czy możesz wypróbować Java 7? –
@JonSkeet Właśnie próbowałem tego w Javie 7, i to działało idealnie. – tbodt
Uruchamianie kodu w jre 7u25 wydaje się naprawić problem, więc wydaje się, że jest to błąd w Javie 6. Ten rodzaj bani, odkąd całkiem garstka ludzi w społeczności Minecrafta, wydaje się nie wiedzieć, jak aktualizować i ten kod jest częścią Modyfikacji Gry, nad którą pracowałem ... Również @ Jon Skeet, czy możesz opublikować odpowiedź, aby oznaczyć ją jako zaakceptowaną? –