【发布时间】:2019-05-23 00:30:55
【问题描述】:
我在获取给定整数 A 和整数 B 之间的所有素数时遇到问题。
问题是输出远远超出了我为 B 定义的任何内容。我认为
if (isPrime){
count++;
会解决这个问题,但输出仍然远远超出预期的整数 B 数。
例如,如果int valueA = 1 和int valueB = 100,它将在停止前获得大约 1 到 500 的素数,而不是在 100 处结束检查。
感谢您的帮助。
import java.util.*;
public class PrimeNumbersTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
// Ask user to input an integer value for A and B
System.out.print("Enter the value of A (must be an integer): ");
int valueA = input.nextInt();
System.out.print("Enter the value of B (must be an integer): ");
int valueB = input.nextInt();
System.out.println("The prime numbers between " + valueA + " and " + valueB + " are:");
final int LINE = 10;
int count = valueA;
int number = 2;
while (count < valueB) {
// Assume the number is prime
boolean isPrime = true;
// Test if number is prime
for (int divisor = 2; divisor <= number / 2; divisor++) {
if (number % divisor == 0) { // If true number is not prime
isPrime = false; // Set isPrime to false
break; // Exit the for loop
}
}
if (isPrime) {
count++;
if (count % LINE == 0) {
System.out.println(number);
}
else
System.out.print(number + " ");
}
number++;
}
}
}
【问题讨论】:
-
你似乎得到了第一个 B 个素数,而不是 B 之前的素数。仔细考虑
if (isPrime) count++;和while (count < valueB) {。我想你想检查number,而不是count。 -
实际上,当我尝试用 while (count
-
当你想处理一个数字范围时,使用 for 循环来减少混乱。你显然想要
for(int number = valueA; number <= valueB; number++){/*check if number is prime*/}
标签: java