//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)
答案 0 :(得分:4)
好的,所以你的代码有一些问题(好的,可能更多),我将在此列出:
问题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 的扩展。请注意,您正在循环的每次迭代中初始化一个新数组。因此,所有素数都不会在同一个地方累积。相反,您的array
将在每次迭代后清除。您应该从循环内部删除该数组声明。
现在,我建议您使用ArrayList
而不是在循环外添加数组声明,这是一个动态增加的数组。所以,你不必给出一个初始大小。
因此,您可以在外部 for
循环之外添加以下声明:
List<Integer> primeList = new ArrayList<Integer>();
问题4:
让我们继续前进到内部 for
循环:
for (Prime:PrimeList);
PrimeList[0]=2;
if(Begin % PrimeList[Prime] != 0){
break;
}
}
现在,只要忘记那个循环有什么问题,因为根本不需要那个循环。您尚未初始化list
。因此,迭代它没有意义。您需要使用指定范围之间的素数对其进行初始化。
因此,不应该使用for循环来迭代数组/列表,而应该测试您正在测试的当前数字,无论它是否为素数。如果是素数,请将其添加到列表中。要测试素数,每个数字都需要一个循环。我建议用不同的方法移动那个逻辑。要检查某个数字是否为素数,请继续将其除以2
到num / 2
之间的数字。只要您看到modulus = 0
,return false
其他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);
}
}
就是这样。现在,我建议您逐步完成答案,并逐个解决每个问题。
答案 1 :(得分:1)
在java中,Arrays是对象,应使用new
进行初始化。
int[] PrimeList = new int[10];
答案 2 :(得分:1)
正如其他人所述,您尚未初始化PrimeList
数组。
有关代码的其他建议。
您应该对正在进行的输入进行验证。检查Exception handling是否相同。例如,如果用户没有输入您预期的数字,那么您的代码就会中断。
变量名称不是java-bean规范格式,即第一个字母应该是小写的,然后应该遵循 camelCase 表示法,这将表示每个下一个字母的第一个字母变量名中的单词。
算法似乎完全错了。 PrimeList不会在任何地方填充,除非您已在单独的代码中生成它们,并且未将其集成到上面给出的代码中。
答案 3 :(得分:1)
for循环中存在语法错误。它应该是
for (int prime: primeList) {
循环的简称需要迭代中使用的变量类型
答案 4 :(得分:-1)
您必须启动数组,例如:
int PrimeList[] = new int[3]
答案 5 :(得分:-1)
我认为您尚未初始化变量int Prime;
和int PrimeList[];
将它们初始化为
int Prime = 0;
int PrimeList[] = new PrimeList[10];