打印小于N的所有素数时出错(Java)

打印小于N的所有素数时出错(Java),java,numbers,Java,Numbers,我正在尝试编写一个程序,它可以打印所有小于或等于输入的数字和找到的素数的素数。例如,输入5将打印2、3和5。我制定了以下代码: import java.util.Scanner; public class Sample { public static void main (String args[]){ Scanner sc=new Scanner (System.in); System.out.print("Enter a number:");

我正在尝试编写一个程序,它可以打印所有小于或等于输入的数字和找到的素数的素数。例如,输入5将打印2、3和5。我制定了以下代码:

import java.util.Scanner;
public class Sample {
    public static void main (String args[]){
        Scanner sc=new Scanner (System.in);
        System.out.print("Enter a number:");
        int number=0;
        number=Integer.parseInt(sc.nextLine());
        int counter=0;
        boolean isPrime=true;
        if (number<=1){
            System.out.println("O prime numbers found.");
        } else {
            for (int i=2; i<=number;i++){
                for (int j=2; j<i;j++){
                    if (i%j==0){
                        isPrime=false;
                        break;
                    } 
                }
            }
            if (isPrime(i)){
                System.out.println(i);
                counter++;
            }
        }
        System.out.println(counter+ " prime numbers found.");
    }
}
有人知道为什么这样不行吗?谢谢。

语句块

if (isPrime(i)){
    System.out.println(i);
        counter++;
}
在使用i的for循环之外



编辑:从代码中,您似乎粘贴了不完整的代码或犯了一些错误。例如,isPrime()函数在哪里定义?真的需要吗?提出这些问题并重新查看代码

在for循环中定义
i
,该循环在
if
语句之前关闭。

替换此块:

        for (int i=2; i<=number;i++){
            for (int j=2; j<i;j++){
                if (i%j==0){
                    isPrime=false;
                    break;
                } 
            }
        }
        if (isPrime(i)){
            System.out.println(i);
            counter++;
        }

for(int i=2;i以下是您要执行的操作:

  • 在i循环中移动isPrime变量的声明(或至少初始化)
  • 将带有打印的测试移到i循环内,并纠正条件(iPrime是一个变量,而不是一个方法)


    if(numberis
    isPrime(x)
    甚至是一个方法???谢谢!我仍然在:if(isPrime(I)){^symbol:methodisprime(int)上遇到“找不到符号”错误位置:类示例1错误我在回答中给出了一个提示。您正在将iPrime作为函数调用。这是您应该做的吗?虽然它指出了OPs代码中的一个主要问题,但这并不能解决
    System.out.println(i)中抛出的主要错误
    statement.Lol…在编辑过程中,您忘记将函数更改为布尔值!事实上。为我辩护,今天是星期五。
            for (int i=2; i<=number;i++){
                for (int j=2; j<i;j++){
                    if (i%j==0){
                        isPrime=false;
                        break;
                    } 
                }
            }
            if (isPrime(i)){
                System.out.println(i);
                counter++;
            }
    
            for (int i=2; i<=number;i++){
                for (int j=2; j<i;j++){
                    if (i%j==0){
                        isPrime=false;
                        break;
                    } 
                }
                if (isPrime){
                    System.out.println(i);
                    counter++;
                }
            }
    
    if (number<=1){
        System.out.println("O prime numbers found.");
    } else {
        for (int i=2; i<=number;i++){
            boolean isPrime=true;
            for (int j=2; j<i;j++){
                if (i%j==0){
                    isPrime=false;
                    break;
                } 
            }
            if (isPrime){
                System.out.println(i);
                counter++;
            }
        }
    }
    
    for (int i=2; i<=number;i++){
        if (isPrime(i)) {
            System.out.println(i);
            counter++;
        }
    }
    
    static boolean isPrime(int i) {
        for (int j=2; j<i;j++){
            if (i%j==0){
                return false;
            } 
        }
        return true;
    }