java中的N素数

java中的N素数,java,Java,所以我用java编写了这段代码,它应该在屏幕上输出从1到n的数字(由用户给出),并且应该在素数附近写“-prime” import java.util.Scanner; public class primeMass { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int n; int i,j; Syste

所以我用java编写了这段代码,它应该在屏幕上输出从1到n的数字(由用户给出),并且应该在素数附近写“-prime”

import java.util.Scanner;
public class primeMass {

    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        int n;
        int i,j;
        System.out.print("Dati n: ");
        n = sc.nextInt();

        for(i=1;i<=n;i++)
            for(j=2;j<=n/2;j++)
            {
                if(i%j==0)
                    System.out.println(i);
                else System.out.println(i +"-prime");

    }}

}
我是新手,我真的在努力解决我的算法,你能告诉我应该如何改变我的程序,使它输出正确的值,并向我解释我做错了什么吗?多谢各位

更新:

我做到了,谢谢大家帮助我:这就是结果:

导入java.util.Scanner; 公共类素数{

public static void main(String args[])
{
    Scanner sc = new Scanner(System.in);
    int n;
    int i,j;
    boolean gasit = false;
    System.out.print("Dati n: ");
    n = sc.nextInt();

    for(i=1;i<=n;i++) {
        gasit=false;
        for(j=2;j*j<=i;j++)
        {
            if(i%j==0) gasit=true;}
        if(!gasit) {System.out.println(i+"-prime");}
        else {
            System.out.println(i);}

    }
}
publicstaticvoidmain(字符串参数[])
{
扫描仪sc=新的扫描仪(System.in);
int n;
int i,j;
布尔gasit=false;
系统输出打印(“数据编号:”);
n=sc.nextInt();

对于(i=1;i而言,问题在于第二个循环一直持续到
n/2
,它应该一直持续到
i/2
,以检查
i
是否为素数。正如注释中所建议的,素数检查算法的更优化版本一直持续到
sqrt(i)


下一个问题是,您以错误的方式得出结论,如果在第一种情况下
如果(i%j==0)
您说不为素数,否则您说它为素数,这是不必要的。您应该迭代
[2:i/2]之间的整个值间隔
得出结论,
i
是素数。

在内部循环的每次迭代中都会打印一些内容

相反,您应该在所有迭代完成后打印一些内容,例如

boolean found = false;
for(j=2;j<=n/2;j++) {
  if(i%j==0) found = true;
}
if (!found) {
  System.out.println(i + "-prime");
} else {
  System.out.println(i);
}

尝试
j第1步:正确的格式。第2步:调试代码,设置一个断点,然后逐条执行代码语句,这样您就可以了解程序的行为方式,然后可以对其进行更改。我今天已经学会了调试,但我仍然不明白为什么在打印完代码后,它会在循环中再次返回他首先问我(例如)“但是我仍然不明白为什么在打印第一个
i
之后它会再次回到循环中”为什么你认为循环应该停止迭代?你能解释一下你期望这种行为是什么吗?也请使用你的编辑器正确缩进你的代码(大多数IDE都有这样的选项,可以根据标准/设置对代码进行格式化/缩进,这样习惯了的人就更容易阅读了——更不用说缩进可以帮助我们看到代码块的范围了)。顺便说一句,如果您有解决方案,请不要将其放在问题部分,而是将其作为答案发布(您应该查看底部的表格部分以获取答案)。发布答案时,请使用选项并将其从问题部分删除。
boolean found = false;
for(j=2;j<=n/2;j++) {
  if(i%j==0) found = true;
}
if (!found) {
  System.out.println(i + "-prime");
} else {
  System.out.println(i);
}
for(j=2; j*j<=i; j++) {