我试图将此布尔数组的某些索引值更改为false,并且确实会更改,但是当以另一种方法重新显示时,它无法正确打印。
这是在学校做的作业。我已经检查了内存位置,它们是相同的。
import java.util.Scanner;
import java.util.Arrays;
public class Lab11avst
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
final int MAX = 100;
boolean primes[];
primes = new boolean[MAX];
computePrimes(primes);
displayPrimes(primes);
}
public static void computePrimes(boolean list[])
{
Arrays.fill(list, true);
for (int i = 1; i < list.length ; i++)
{
if (list[i] = true)
{
for (int j = (i+1); j < 20; j+=(i+1))
{
list[j] = false;
System.out.println( j+" "+list[j]);
}
}
}
}
public static void displayPrimes( boolean x[])
{
for(int y = 1; y< (x.length); y+=1)
{
if(x[y] =true)
{
System.out.print(y+ " ");
}
}
}
}
答案 0 :(得分:0)
问题出在您的displayPrimes
和computePrimes
方法内部。您分别在if(x[y] =true)
和if (list[i] = true)
中都有一个if语句。用于比较的运算符是两个等号或==
。单个等号是一个赋值运算符,它返回x[y]
或list[i]
的新值。将=
视为一个接收两个参数并返回第二个参数并修改了第一个参数的函数。由于x[y]
和list[i]
被修改为true,因此它将始终通过if语句检查。要解决此问题,请将if(x[y] =true)
替换为if(x[y])
,将if (list[i] = true)
替换为if (list[i])
。