java - 这个数组有什么问题

标签 java arrays

//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 循环来迭代数组/列表。如果它是素数,请将其添加到列表中。要测试素数,您需要对每个数字进行循环。我建议在单独的方法中移动该逻辑。要检查一个数字是否为素数,请继续将其除以 2num/2 之间的数字。一旦您看到 modulus = 0return 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/

相关文章:

java - 检查数组元素是否包含特定值的最佳方法

php - 列的回显数组值不起作用

java - 尝试从 fragment 中的 fragment 调用方法并出现 NPE

java - 这个找零问题的解决方案有什么问题吗?

java - 将字符串子集转换为数组变量的最佳方法是什么?

c - 在C中查找数组的长度

java - 检查 Web 代理的类型

java - ifne 和 ifnonnull 有什么区别?

java - 从字符串集列表到普通列表

c - 在 C 中制作二维字符串数组