我正在尝试创建一个程序,它将用户输入作为整数,并在它之前和之后显示素数。因为输出什么都没有,我看不出我做错了什么。如果有人可以帮忙的话会很棒!
package prime;
import java.util.Scanner;
public class Prime
{
boolean flag = false;
public boolean isPrime(int x)
{
for (int i = 2; i <= x/2; i++)
{
if (x % i == 0)
{
flag = true;
return flag;
}
}
}
public static void main(String [] abc)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter an number. A prime number preceeding and succeeding that number will be displayed.");
int num = sc.nextInt();
Prime p = new Prime();
for (int j = num;j < num && j > 0;j--)
{
if (p.isPrime(j-1) == true)
{
System.out.println("Prime number predeceeding " + num + " : " + j);
break;
}
}
for (int j = num;j > num;j++)
{
if (p.isPrime(j+1) == false)
{
System.out.println("Prime number succeeding " + num + " : " + j);
break;
}
}
}
}
答案 0 :(得分:0)
这是修改后的工作代码。
做了一些改变: -
1.Initialized flag为true,如果我们发现任何因素,则返回false。
2.为了找到更大的素数,只需从num + 1开始一个无限循环。但请确保输入数字在整数值范围内,即65535。
import java.util.Scanner;
public class Prime
{
boolean flag = true;
public boolean isPrime(int x)
{
for (int i = 2; i < x/2; i++)
{
if (x % i == 0)
{
return false;
}
}
return flag;
}
public static void main(String [] abc)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter an number. A prime number preceeding and succeeding that number will be displayed.");
int num = sc.nextInt();
Prime p = new Prime();
for (int j = num-1; j > 0; j--)
{
if (p.isPrime(j))
{
System.out.println("Prime number predeceeding " + num + " : " + j);
break;
}
}
for(int j=num+1; ;j++)
{
if (p.isPrime(j))
{
System.out.println("Prime number succeeding " + num + " : " + j);
break;
}
}
}
}
希望这有帮助!
答案 1 :(得分:0)
两个for循环的条件将评估为false。在第一种情况下:
for (int j = num;j < num && j > 0;j--)
// for(initialization; test-condition; updation)
第一次迭代中的测试条件为false,因为您已将j
初始化为num
,而您现在正在检查j < num
是否为false。因此,它永远不会进入这个循环。
同样,在第二种情况下:
for (int j = num;j > num;j++)
您已将j
初始化为num
,现在正在检查j > num
是否明显为假。因此,这个循环的内容也永远不会被执行。
您可以通过更改两个for循环中的初始化部分来解决这些问题(如@zenwraight所示):
for(int j = num-1; j > 0; j--) // first case
for(int j = num+1; ; j++) // second case