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