我试图从用户那里获取一个范围的输入,然后找到该范围内的所有素数。我使用的逻辑是,任何大于 2 且小于自身且不能被此范围内的任何数字(2 到小于自身)整除的数字都是质数。
public class Main
{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter the range : ");
int n1=sc.nextInt();
int n2=sc.nextInt();
int fl=0;
for(int i=n1;i<n2;i++)
{
for(int j=2;j<i;j++)
{
if(i % j == 0)
{
fl=1;
}
}
if(fl == 0)
System.out.println(i);
}
}
}
这是我得到的输出: 1 2 3
当范围为 1 至 20(不超过 3)时。 请帮帮我。
正如 Turamarth 所指出的,您需要在每次迭代时重置标志。我还建议你循环直到
i <= n2
,否则你会错过最后一个数字,并添加输入检查。
public static void main(String args[])
{
int n1;
int n2;
boolean flag;
Scanner sc = new Scanner(System.in);
System.out.print("Enter the range: ");
n1 = sc.nextInt();
n2 = sc.nextInt();
sc.close();
if (n1 < 2)
n1 = 2;
if (n2 < 2)
{
System.out.println("No prime numbers in range.");
return;
}
System.out.println("Result: ");
for(int i = n1; i <= n2; i++)
{
flag = false;
for(int j = 2; j < i; j++)
{
if(i % j == 0)
{
flag = true;
}
}
if(!flag)
System.out.println(i);
}
}
[1, 19] 示例:
Enter the range: 1 19
Result:
2
3
5
7
11
13
17
19
考虑一下:
i % j == 0
) 时,可以通过在 if 条件中放入 break;
语句来退出第二个循环;i >= 3
时你可以将其增加2:i += 2
。在外循环的每次迭代开始时,您必须将标志
fl
重置回 0。public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("enter n1:");
int n1=sc.nextInt();
System.out.println("enter n2:");
int n2=sc.nextInt();
int i;
int j;
int flag=0;
for(i=n1;i<=n2;i++)
{
for(j=2;j<i ;j++)
{
if(i % j==0)
{
flag++;
break;
}
}
if(flag==0)
{
System.out.println("i= "+i);
}
flag=0;
}
}