//Prime Number Calculator
import java.util.Scanner;
class PrimeNumbers {
public static void main(String[] args){
int End;
int Begin;
Scanner in = new Scanner(System.in);
//insert max value for the calculator.
System.out.println("Where should I stop?");
End = in.nextInt();
for (Begin=3; Begin<=End; Begin++){
System.out.println(Begin);
int Prime;
int PrimeList[] ;
//something is wrong around here... I don't understand what...
for (Prime:PrimeList);
PrimeList[0]=2;
if(Begin%PrimeList[Prime]!=0){
break;
}
}
}
}
我知道有很多素数计算器,但为了学校我想制作一个,但我不知道我哪里错了。
错误信息:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error on token "Prime", Identifier expected after this token
Prime cannot be resolved to a type
Type mismatch: cannot convert from element type int to Prime
at PrimeNumbers.main(PrimeNumbers.java:25)
最佳答案
好吧,你的代码有几个问题(好吧,可能更多),我将在这里列出:
问题 1:
首先,第一件事。始终遵循 Java 命名约定。您的变量名称和方法名称应以小写字母开头。所以:
int End; // Should be `int end;`
int Begin; // Should be `int begin;`
问题2:
您刚刚声明了数组引用,但尚未初始化它。下面的语句只是声明一个 int 类型的数组引用:
int PrimeList[] ;
您需要创建一个数组对象,并为其分配引用:
int PrimeList[] = new int[size];
问题3:
这个问题是问题2的延伸。请注意,您将在循环的每次迭代中初始化一个新数组。因此,所有质数不会累积在同一个地方。相反,您的数组将在每次迭代后清除。您应该从循环内部删除该数组声明。
现在,我建议您不要在循环外部添加数组声明,而是使用ArrayList
,它是一个动态递增的数组。因此,您不必给出初始大小。
因此,您可以在外部 for
循环之外添加以下声明:
List<Integer> primeList = new ArrayList<Integer>();
问题4:
让我们继续讨论内部 for
循环:
for (Prime:PrimeList);
PrimeList[0]=2;
if(Begin % PrimeList[Prime] != 0){
break;
}
}
现在,只需忘记该循环有什么问题,因为根本不需要该循环。您尚未初始化您的列表
。因此,迭代它是没有意义的。您需要使用指定范围内的素数来初始化它。
因此,您应该测试当前正在测试的数字,无论它是否为素数,而不是使用 for 循环来迭代数组/列表。如果它是素数,请将其添加到列表中。要测试素数,您需要对每个数字进行循环。我建议在单独的方法中移动该逻辑。要检查一个数字是否为素数,请继续将其除以 2
到 num/2
之间的数字。一旦您看到 modulus = 0
,return false
else return true
: -
public boolean isPrime(int num) {
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) return false;
}
return true;
}
现在,让我们回到原来的方法。看看你的外循环:
for (begin=3; begin <= end; begin++) {
/** For each number, check whether it's prime or not **/
if (isPrime(begin)) {
/** Is Prime, add it to list **/
primeList.add(begin);
}
}
就是这样。现在,我建议你一步一步地看答案,并单独解决每个问题。
关于java - 这个数组有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707315/