Java 编译错误:无法将布尔值转换为整数

Java 编译错误:无法将布尔值转换为整数,java,compiler-errors,static-typing,Java,Compiler Errors,Static Typing,问题如下: 创建一个名为PrimeGenerator的程序。写一个方法 确定数字是否为素数 公共静态布尔值isPrime(长数字) 在main()中创建一个名为primes的数组,该数组将包含前200个素数 数字。通过调用isPrime(long)方法查找素数,并将每个素数存储在 阵列。然后在命令提示窗口中显示素数,每行十个。 素数必须显示在右对齐的列中。一定要贴上你的标签 输出和注释代码。(爪哇) 到目前为止,我只知道: public class PrimeGenerator {

问题如下:

  • 创建一个名为PrimeGenerator的程序。写一个方法 确定数字是否为素数
  • 公共静态布尔值isPrime(长数字)

  • main()
    中创建一个名为
    primes
    的数组,该数组将包含前200个素数 数字。通过调用
    isPrime(long)
    方法查找素数,并将每个素数存储在 阵列。然后在命令提示窗口中显示素数,每行十个。 素数必须显示在右对齐的列中。一定要贴上你的标签 输出和注释代码。(爪哇)
  • 到目前为止,我只知道:

    public class PrimeGenerator 
    {
    
        public static int[] work = new int[201];
    
        public static void main(String[] args)
        {
            final int ARRAY_LENGTH = 200;
            int[] array = new int[ARRAY_LENGTH];
            for (int numberList = 1; numberList < array.length; numberList++)
                array[numberList] = isPrime(6L);
            for (int numberList = 1; numberList < array.length; numberList++)
                System.out.printf("%5d%8d%n", numberList, array[numberList]);
        }
        public static boolean isPrime(long number){
            for(long gg = 3; gg * gg <= number; gg++){
                if(number % gg ==0)
                    return false;
            }
            return true;
        }
    }
    
    公共类素数生成器
    {
    公共静态int[]工作=新int[201];
    公共静态void main(字符串[]args)
    {
    最终整数数组长度=200;
    int[]数组=新的int[array_LENGTH];
    for(int numberList=1;numberList对于(long gg=3;gg*gg您有一个
    int[]
    数组。方法
    isPrime()
    返回一个
    boolean
    。当然,您不能将布尔值分配给int。这就是为什么会出现错误。

    答案非常简单:
    isPrime(6L);
    返回一个布尔值,而不是
    int
    ,因此您需要仔细查看应用程序的设计,因为这显然表明有问题。

    与其尝试将
    布尔值添加到
    int
    数组,不如尝试以下操作:

    int[] primes = new int[ARRAY_LENGTH/2];
    int index = 0;
    for (int numberList = 1; numberList < ARRAY_LENGTH; numberList++){
        if (isPrime(numberList)){
            primes[index] = numberList;
            index++;
        }
    }
    
    int[]primes=newint[ARRAY_LENGTH/2];
    int指数=0;
    for(int numberList=1;numberList

    现在,您只需检查一个数字是否为素数,并且只将素数保存到一个单独的数组中。
    索引
    用于跟踪您在列表中的位置,从而将新找到的素数添加到其中。
    数组长度/2
    只是一个大小,您可以确定它足够长。

    我认为您需要存储数组中的素数而不是布尔值。我已经修改了您的代码以获得预期的结果

    注意:我稍微更改了您的
    isPrime
    方法。请看一看。记住
    1
    不是素数,所以我们从
    2
    开始检查

    public class PrimeGenerator {
      public static void main(String[] args) {
        final int ARRAY_LENGTH = 200;
        int[] array = new int[ARRAY_LENGTH];
        int count = 0;
    
        for (int numberList = 2; count<200; numberList++)
            if(isPrime(numberList)==true)
            {
                array[count++] = numberList;
            }
    
        for (int numberList = 0; numberList < count; numberList++)
            System.out.printf("%5d%8d%n", numberList+1, array[numberList]);
      }
      public static boolean isPrime(long number) {
            for (long gg = 2; gg * gg <= number; gg++) {
                if (number % gg == 0)
                    return false;
            }
            return true;
        }
    }
    
    公共类素数生成器{
    公共静态void main(字符串[]args){
    最终整数数组长度=200;
    int[]数组=新的int[array_LENGTH];
    整数计数=0;
    
    对于(int numberList=2;count,您可以解决将布尔值转换为int的问题,如下所示:

    public static int convertBooleanIntoInteger(boolean booleanName) {              
        int yourConvertedInteger = 0;
        if(booleanName) {
            yourConvertedInteger = 1; 
        }
    
        return yourConvertedInteger;
    }
    

    你希望数组中的每个元素代表什么?你给它赋值,就像你想让它代表一个数字是否是素数一样,而赋值说明数组本身应该包含素数。提示:在每次迭代中将6传递给
    isPrime
    ,对你也没有多大帮助。为什么当您想在其中存储
    boolean
    s时,是否将
    array
    设置为
    int[]
    ?将其设置为
    boolean[]
    。回答正确-但是,
    array[numberList]=isPrime(6L)
    他试图将一个
    布尔值
    赋给
    int
    ,而不是赋给
    int
    数组。
    array
    int
    数组,
    数组[numberList]
    只是一个
    int
    。是的。谢谢你注意到这一点。我想你的意思是
    boolean
    int
    而不是
    boolean
    Integer
    。根据OP的问题描述,我认为这是我们想要的解决方案,所以+1。你能详细说明一下你的第一个for语句吗?它是如何工作的?它是如何工作的和我的完全不同?