sen*_*ter 3 java eclipse primes loops
好吧,我的问题不是如何弄清楚一个数字是否是素数,因为我认为我想出来了,但更多的是如何让它正确显示.
这是我的代码:
public static void main(String[] args) {
// Declare Variables
int randomNumbers = 0;
int sum = 0;
//Loop for number generation and print out numbers
System.out.print("The five random numbers are: ");
for (int i = 0; i <= 4; i++)
{
randomNumbers = (int)(Math.random()*20);
sum += randomNumbers;
if (i == 4) {
System.out.println("and " + randomNumbers + ".");
}
else {
System.out.print(randomNumbers + ", ");
}
}
//Display Sum
System.out.println("\nThe sum of these five numbers is " + sum + ".\n");
//Determine if the sum is prime and display results
for(int p = 2; p < sum; p++) {
if(sum % p == 0)
System.out.println("The sum is not a prime number.");
else
System.out.println("The sum is a prime number.");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如果数字最终是9,它会说它是一个素数,它不是.我认为问题是中断在一个循环后停止它所以它不是递增变量p所以它只测试除以2(我认为).但是如果我删除了断点,它将在每次传递中打印出"和/不是素数",直到它退出循环.不知道该怎么做.
小智 5
您找到数字是否为素数的方法是正确的方法.为了使它不会一直打印出数字是否为素数,你可以有一个外部变量,它代表数字是否为素数.
如
boolean prime = true;
for (int p = 2; p < sum; p++) {
if (sum % p == 0) {
prime = false;
break;
}
}
if (prime)
System.out.println("The sum is a prime number.");
else
System.out.println("The sum is not a prime number.");
Run Code Online (Sandbox Code Playgroud)
通过这种方法,程序将假定数字为素数,直到它证明是错误的.因此,当它发现它不是素数时,它将变量设置为false并突破循环.
然后在循环结束后,您只需打印该数字是否为素数.
一种可以使这个循环更快的方法是从p = 2到p =和的平方根.所以使用这个方法你的for循环将如下所示:
double sq = Math.sqrt((double)sum);
for (int p = 2; p < sq; p++) {
//Rest of code goes here
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
小智 5
你需要存储数字是否在循环外的布尔值中是素数:
//Determine if the sum is prime and display results
boolean isPrime = true;
for(int p = 2; p < sum; p++) {
if(sum % p == 0){
isPrime = false;
break;
}
}
if(isPrime){
System.out.println("The sum is a prime number.");
} else {
System.out.println("The sum is not a prime number.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8429 次 |
| 最近记录: |