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);
}
}
}