Java 如何做一个程序,确定一个数字是素数还是复合数

Java 如何做一个程序,确定一个数字是素数还是复合数,java,Java,我是Java的初学者。由于某些原因,我无法让我的程序正确地确定我输入的数字是素数还是复合数。有人能告诉我我做错了什么吗 public static void main(String[] args) { Scanner in = new Scanner(System.in); boolean prime = true; System.out.println("Please enter a number"); int num1 = in .nextInt();

我是Java的初学者。由于某些原因,我无法让我的程序正确地确定我输入的数字是素数还是复合数。有人能告诉我我做错了什么吗

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    boolean prime = true;

    System.out.println("Please enter a number");
    int num1 = in .nextInt();
    int numval = 1;
    for (int i = 2; i < num1; i = i + 1) {
        numval += 1;
        int test = num1;
    }
    if (num1 != 0) {
        System.out.println("This is a prime number");
        prime = false;

    }
    if (prime == true) {
        System.out.println("This is not a prime number");

    }
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
布尔素数=真;
System.out.println(“请输入一个数字”);
int num1=in.nextInt();
int numval=1;
对于(int i=2;i
我不确定您想用测试变量做什么,但请尝试类似这样更干净的方法

boolean prime = true;
int num1 = in .nextInt();
// We know that composite numbers start from 2 and that 1 is neither prime nor composite.
if (num1 < 2) {
   throw new IllegalArgumentException("Number has to greater than 1");
}
for (int i = 2; i < num1; i++) {
    if (num % i == 0) {
        prime = false;
        break;
    }
}
if (prime) {
    System.out.print("Number is a prime");
} else {
    System.out.print("Number is composite");
}
布尔素数=true;
int num1=in.nextInt();
//我们知道复合数从2开始,1既不是素数也不是复合数。
if(num1<2){
抛出新的IllegalArgumentException(“数字必须大于1”);
}
对于(int i=2;i
素数是指只有1和自身两个因子的数。因此,您必须检查它是否有任何大于1小于N的因子。因此,您必须编写一个从2到N-1的循环,以检查是否可以除以从2到N-1的任何数字

如果可以从循环中获取任何因子,则将变量
prime
设为false并从循环中中断,因为如果我们从循环中获取一个因子,则无需检查其他因子

如果我们没有从循环中得到任何因子,那么
prime
的值将像我们之前初始化的那样为真

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    boolean prime = true;

    System.out.println("Please enter a number");
    int num1 = in .nextInt();

    if(num1<2)
    {
        System.out.println("Number should be greater than 1");
        return;
    }

    for (int i = 2; i < num1; i = i + 1) {
        if (num1 % i == 0) {
            prime = false;
            break;
        }
    }
    if (prime == true) {
        System.out.println("This is a prime number");

    }
    if (prime == false) {
        System.out.println("This is not a prime number");

    }
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
布尔素数=真;
System.out.println(“请输入一个数字”);
int num1=in.nextInt();
如果(num1我知道两种方法:
让我们记住使用的是“number”

1:((数字%2)=0)
2:((数字和1)==0)

我相信对于任何素数都会返回true,否则返回false。

布尔素数=true;
  boolean prime = true;
    for (int i = 2; i * i <= num1; i = i + 1) {
      if (num1 % i == 0) {
        prime= false;
        break;
      }
    }
    if (prime && num1>1) {
      System.out.println("This is a prime number");
    }else {
      System.out.println("This is not a prime number");
    }
对于(int i=2;i*i 1){ System.out.println(“这是一个素数”); }否则{ System.out.println(“这不是质数”); }
当您在调试器中单步执行此代码时,对于产生不正确输出的给定输入,它失败的具体位置/原因是什么?
if(num1!=0){System.out.println(“这是一个素数”);…}
当然,除了0以外的所有数字都不是素数。你的for循环没有意义,因为你没有做任何需要循环的事情——你甚至没有使用它里面的两个变量
numval
test
。老实说,我开始在程序结束时把自己弄糊涂了。我一直在修改我的程序因为它从来都不起作用。不管怎样,谢谢你的回复。如果我想在这方面做得更好,我需要批评。
I=2
I
如果输入小于
3
,它们一起会给你带来问题,不是吗?这是真的,我对小于2的数字进行了修复。对于2和3,它不会进入for循环,所以用default它们是素数:)关于2,你是对的。我没有意识到。但是3将进入循环,因此这不是问题。但是,也许最好简单地执行
System.out.println(“数字既不是素数也不是复合数”);
而不是抛出IllegalArgumentException。我们可以这样做,但如果我们可以帮助的话,我们也希望控制流不会进一步下降。在您的建议中,它将打印“既不是素数也不是复合数”并执行剩余的逻辑,除非我们单独处理该情况。添加一点关于您提供的代码片段的解释将更有利于OPC。对此,您可以做一些改进。首先,如果您发现它不是素数,那么您可以提前中止,因此您应该将其放在最后一个子句中。第二,你只需要升到srt(num),因为一旦你经过那里,你就不需要它了。最后,你要测试所有的奇偶数;你可以测试%2一次,然后从%3开始,每次上升两个。