Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将素数打印为N值_Java_Methods_Primes - Fatal编程技术网

Java 将素数打印为N值

Java 将素数打印为N值,java,methods,primes,Java,Methods,Primes,该程序应打印所有素数,直到输入一个整数,例如: Enter a Number: 20 2 3 5 7 11 13 17 19 我只是无法让我的程序正常工作,我真的不知道该怎么做,所以如果有人能检查它并尝试修复它,那将非常感谢,谢谢 import java.util.Scanner; public class PrimeGenerator { public static void main(String args[]) { Scanner k = new Scan

该程序应打印所有素数,直到输入一个整数,例如:

 Enter a Number: 
 20
 2
 3
 5
 7
 11
 13
 17
 19
我只是无法让我的程序正常工作,我真的不知道该怎么做,所以如果有人能检查它并尝试修复它,那将非常感谢,谢谢

import java.util.Scanner;
 public class PrimeGenerator {
public static void main(String args[]) {
    Scanner k = new Scanner(System.in);
    System.out.println("Enter an integer");
    int number = k.nextInt();
    PrimeGenerator matt = new PrimeGenerator();
    System.out.println(matt.nextPrime(number));
}

private int number;

public PrimeGenerator(int n) {
 number = n;
}

public int nextPrime(int number) {
    for (int i = 1; i <= number; i++) {
        boolean prime = true;
        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                prime = false;
            }
        }
        if (prime){
            return i;
        }
    }
   }
 }
import java.util.Scanner;
公共类素数生成器{
公共静态void main(字符串参数[]){
扫描仪k=新的扫描仪(System.in);
System.out.println(“输入整数”);
整数=k.nextInt();
PrimeGenerator matt=新PrimeGenerator();
System.out.println(matt.nexttime(number));
}
私有整数;
公共素数生成器(int n){
数字=n;
}
公共整数nextPrime(整数编号){

对于(inti=1;i您实际上已经在那里了。您刚刚在程序流中犯了一个错误

for (int i = 1; i <= number; i++) {
    boolean prime = true;
    for (int j = 2; j < i; j++) {
        if (i % j == 0) {
            prime = false;
        }
    }
    if (prime){
        return i; //<-- this return will terminate nextPrim
    }
}
一些一般提示:

  • 处理编译器错误。它们准确地告诉您代码中发生错误的位置和内容
  • 在实施程序之前,先考虑一下程序的流程
  • 将任务分解为多个较小的任务,并逐个执行。例如:对于此问题,首先打印出范围
    2,number
    内的所有数字。然后再进一步添加过滤原始数字的功能。现在您有了两个组件,可以轻松地独立测试

当您返回
i
时,您的
nexttime
函数提前终止,请尝试以下操作:

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner k = new Scanner(System.in);
    System.out.print("Enter an integer:");
    int number = k.nextInt();
    printPrimesUptoN(number);
  }

  public static void printPrimesUptoN(int n){
    for(int i=2;i<n;i++){
      boolean isPrime = true;
      for(int j=2;j<i;j++){
        if(i % j == 0){
          isPrime = false;
          break;
        }
      }
      if(isPrime)
        System.out.println(i);
    }
  }
}
import java.util.Scanner;
班长{
公共静态void main(字符串[]args){
扫描仪k=新的扫描仪(System.in);
System.out.print(“输入整数:”);
整数=k.nextInt();
printPrimesUptoN(编号);
}
公共静态无效打印权限(int n){

对于(int i=2;i您的代码有一些问题,也许我们可以一起解决。首先,您在
nexttime
中缺少
return
语句,并且没有空的默认构造函数
PrimeGenerator()
,因为您创建了一个参数构造函数。请尝试以下操作:

public class PrimeGenerator {
    public static void main(String args[]) {
        Scanner k = new Scanner(System.in);
        System.out.println("Enter an integer");
        int number = k.nextInt();
        // you probably want to pass your maximum value to the constructor
        PrimeGenerator matt = new PrimeGenerator(number);
        // without a loop of some sort this will only print a single prime number, e.g.
        // Enter a Number:
        // 20
        // 2
        System.out.println(matt.nextPrime(number));
    }

    private int number;

    public PrimeGenerator(int n) {
        this.number = n;
    }

    // you're using the argument as upper boundary for your prime detection while not increasing your lower boundary
    // also you're checking if i is a prime here which you always start at 1. this should always return the same value because once you find a prime number you return
    // you should consider using an algorithm like Sieve of Eratosthenes (or advanced verions thereof) to determine if a given number is prime
    public int nextPrime(int number) {
        for (int i = 1; i <= number; i++) {
            boolean prime = true;

            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    prime = false;
                }
            }

            if (prime){
                return i;
            }
        }

        // you need to return something at the end of this method or throw an exception
        throw new IllegalStateException("no more prime numbers available!");
    }
}
公共类素数生成器{
公共静态void main(字符串参数[]){
扫描仪k=新的扫描仪(System.in);
System.out.println(“输入整数”);
整数=k.nextInt();
//您可能希望将最大值传递给构造函数
PrimeGenerator matt=新PrimeGenerator(编号);
//如果没有某种循环,这将只打印一个素数,例如。
//输入一个数字:
// 20
// 2
System.out.println(matt.nexttime(number));
}
私有整数;
公共素数生成器(int n){
这个数字=n;
}
//您使用参数作为素数检测的上边界,而不增加下边界
//你也在检查我是否是素数,你总是从1开始。这应该总是返回相同的值,因为一旦你找到一个素数,你就会返回
你应该考虑使用一个像ErasoStes筛选器这样的算法(或者它的高级顶点)来确定给定的数字是否是素数。
公共整数nextPrime(整数编号){

对于(inti=1;i,您最初的错误在

PrimeGenerator matt = new PrimeGenerator();
错误:

PrimeGenerator.java:7: error: constructor PrimeGenerator in class PrimeGenerator cannot be applied to given types;
    PrimeGenerator matt = new PrimeGenerator();
                          ^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error
请注意,您有一个与类同名的方法,但我不认为您将其用作构造函数,如果您是,它会得到一个int,但您没有给出它。第13行的方法是:

public PrimeGenerator(int n) {
 number = n;
}
试着做

new PrimeGenerator().nextPrime(number);
反而

import java.util.Scanner;

public class PrimeGenerator {
        public static void main(String args[]) {
                Scanner k = new Scanner(System.in);
                System.out.println("Enter an integer");
                int number = k.nextInt();
                new PrimeGenerator().nextPrime(number);
        }   

        public void nextPrime(int number) {
                for (int i = 1; i <= number; i++) {
                        boolean prime = true;
                        for (int j = 2; j < i; j++) {
                                if (i % j == 0) {
                                        prime = false;
                                }   
                        }   
                        if (prime){
                                System.out.println(i);
                        }   
                }   
        }   
}
import java.util.Scanner;
公共类素数生成器{
公共静态void main(字符串参数[]){
扫描仪k=新的扫描仪(System.in);
System.out.println(“输入整数”);
整数=k.nextInt();
新建PrimeGenerator().nextTime(编号);
}   
public void nexttime(整数){

对于(int i=1;i有几个问题:

  • 你使用IDE吗?如果是的话,为什么不呢?如果你认为自己是初学者,建议使用一个,比如Eclipse IDE或NETBeaIDE。
  • 关于您的算法,乍一看,存在编译和逻辑问题
  • 编译问题是当类的执行不起作用时。在这种情况下,方法
    nexttime(int number)
    必须返回
    int
    。尽管您放置了return子句,但当prime为
    false
    时,该方法不返回任何值。您可以通过IDE轻松发现此问题
  • 另一个编译问题,sentinel或变量
    i
    位于for循环内,您正在for循环外打印它的值。IDE将再次帮助您解决此问题
  • 逻辑问题是,当且仅当标志
    prime
    为true时才返回一个值,因此,当调用该方法(假设正在工作)时,当调用
    System.out.println(matt.nexttime(number));
  • 正确的实施应考虑以下因素:

  • 该方法不返回,即
    public void nextPrime(number){…
    ,这意味着您不需要在main方法中打印,只需调用它即可
  • 该方法实际上是打印数字
  • 通过这种方式,您可以检查
    i%j
    是否与零不同,这样您就不需要处理更多的除法器,从而中断
    for
    循环
  • 打印出来
  • 就这样

    public static void main(String [] args) {
        .
        .
        .
        PrimeGenerator matt = new PrimeGenerator();
        matt.nextPrime(number);
    }
    
    public void printPrime(int number) {
        boolean prime = true;
        for (int i = 2; i <= number; i++) {
            prime = true;
            for (int j = 2; j < i; j++) {
                 if (i % j != 0) {
                     prime = false;
                     break;
                }
            }
            if (prime) {
                System.out.println(i);
            }
        }
    }
    
    publicstaticvoidmain(字符串[]args){
    .
    .
    .
    PrimeGenerator matt=新PrimeGenerator();
    matt.NextTime(数字);
    }
    公共空打印素数(整数){
    布尔素数=真;
    
    对于(int i=2;我请给出一个;什么不起作用?是的,不清楚什么不起作用。错误?异常?输出错误?请删除JavaScript标记
    import java.util.Scanner;
    
    public class PrimeGenerator {
    
            private int number; 
    
            public static void main(String args[]) {
                    Scanner k = new Scanner(System.in);
                    System.out.println("Enter an integer");
                    int number = k.nextInt();
                    // Initialize with a number.
                    PrimeGenerator pg = new PrimeGenerator(number);
                    pg.printPrimes();
            }   
    
            // This is the constructer you were misusing.
            public PrimeGenerator(int n) {
                    number = n;
            }   
    
            public void printPrimes() {
                    // Actually use your private number variable.
                    for (int i = 1; i <= number; i++) {
                            boolean prime = true;
                            for (int j = 2; j < i; j++) {
                                    if (i % j == 0) {
                                            prime = false;
                                    }   
                            }   
                            if (prime){
                                    System.out.println(i);
                            }   
                    }   
            }   
    }
    
    public static void main(String [] args) {
        .
        .
        .
        PrimeGenerator matt = new PrimeGenerator();
        matt.nextPrime(number);
    }
    
    public void printPrime(int number) {
        boolean prime = true;
        for (int i = 2; i <= number; i++) {
            prime = true;
            for (int j = 2; j < i; j++) {
                 if (i % j != 0) {
                     prime = false;
                     break;
                }
            }
            if (prime) {
                System.out.println(i);
            }
        }
    }