Ваш код работает до бесконечности, потому что вы поместили свой break
в неправильную точку.Ваш break
выходит из внутреннего цикла, который является for(int j = 1; j <= i; j++)
, хотя вы должны нацеливаться на внешний цикл for( int i =1; true; i++)
, поскольку именно это решает, сколько чисел будет печатать внутренний цикл, просто чтобы проверить, простое ли число.
Я исправил ваш подход в этом коде (объяснение в комментариях)
int numbersPrinted = 0; // To keep track of how many numbers have been printed
for (int i = 2; true; i++) {
boolean isPrime = true; // Assuming the number is prime
for (int j = 2; j < i; j++) {
// Checking if any number from 2 to i-1 completely divides i
if (i % j == 0) {
// If a number completely divides (gives 0 remainder)
// The number is not prime
isPrime = false;
// You can use break here. I don't think it matters anyways.
}
}
if (isPrime) {
// Printing i only if it is prime
System.out.print(i + ", ");
numbersPrinted++; // Updating the numbersPrinted
}
// Checking if the numbers printed is grater than or equal to 100
if (numbersPrinted >= 100)
// This will break the outermost loop
// This is where you messed up
break;
}
Вывод (ровно 100 простых чисел)
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541,