Java 在switch语句中使用逻辑

Java 在switch语句中使用逻辑,java,switch-statement,Java,Switch Statement,我的问题与以下代码有关: public static void main(String[] args) { // Find Prime Numbers from 0 to 100 int i; for (i=2; i <= 100; i++) { int j = 2; boolean iPrime = true; //The following line gives incorrect results, but s

我的问题与以下代码有关:

public static void main(String[] args) {

    // Find Prime Numbers from 0 to 100
    int i;
    for (i=2; i <= 100; i++) {
        int j = 2;
        boolean iPrime = true;

        //The following line gives incorrect results, but should execute faster
        //  while ((iPrime = true) && (j < (i / 2 + 1))) {
        //The following line gives correct results but performs un-necessary operations
        //by continuing to calculate after the number is found to be "not prime"
        while (j < (i / 2 + 1)) {

            j++;
            if ((i % j) == 0) {
                iPrime = false;
                //System.out.println(j + " is a factor of " + i);
            }
        }
        if (iPrime) {
            System.out.println(i + " is a prime number!");
        }
    }
}
publicstaticvoidmain(字符串[]args){
//查找0到100之间的素数
int i;

对于(i=2;i只需将
=
更改为
=
,即更改

while ((iPrime = true) && (j < (i / 2 + 1)))
while((iPrime=true)和&(j<(i/2+1)))
进入

while((iPrime==true)和&(j<(i/2+1)))
性能更好的完整代码

public static void main(String[] args) {
    // Find Prime Numbers from 0 to 100
    System.out.println(2 + " is a prime number!");
    for (int i = 3; i <= 100; i += 2) {
        boolean isPrime = true;
        for (int j = 3; j * j <= i; j += 2) {
            if ((i % j) == 0) {
                isPrime = false;
                break;
            }
        }
        if (isPrime) {
            System.out.println(i + " is a prime number!");
        }
    }
}
publicstaticvoidmain(字符串[]args){
//查找0到100之间的素数
System.out.println(2+“是一个素数!”);
对于(inti=3;i
if((iPrime=true)&&&&…)
应该是
if((iPrime)&&&…)

通过执行
isPrime=true
,您将
isPrime
指定true
,而不是将其值与
true
进行比较

您可能还希望看到以下内容,以便更好地理解代码中发生的情况:

在运行时,赋值表达式的结果是 赋值后的变量。赋值的结果 赋值表达式本身不是变量


因此,当您使用
=
操作符而不是
=
(当您将某个内容与
true
进行比较时,会删除该操作符-而不是编写
if(someBoolean==true)
时,您只需编写
if(someBoolean)
),您实际上一直在满足条件!

约翰切恩902/Maroun Maroun请修复您的错误;此外,您可以执行的优化是

System.out.println("2 is a prime number!"); // the for loop won't detect 2 anymore
for (i=3; i <= 100; i+=2) {
System.out.println(“2是质数!”);//for循环将不再检测到2

对于(i=3;i首先在运行代码时,我发现它将4显示为素数,这是不正确的。原因是您的j++行的位置。您应该将while循环更改为:

while (j < (i / 2 + 1)) {   
                if ((i % j) == 0) {
                    iPrime = false;

                    //System.out.println(j + " is a factor of " + i);
                    break;
                }
                j++;
            }
while(j<(i/2+1)){
如果((i%j)==0){
iPrime=false;
//System.out.println(j+”是“+i”的一个因子);
打破
}
j++;
}
转到第二部分,当确定数字不是素数时,您希望避免额外的计算


注释的部分不起作用,因为您有赋值而不是相等比较。

while(iPrime&&(j<(i/2+1)))
someBoolean==true
?真的吗?是的!这一点现在很清楚了!我记得当我第一次读到=/==运算符时,我想他们会欺骗我!感谢帮助,从现在起我会小心那个陷阱!谢谢大家的帮助!一旦我得到了你的答案,这一点就很明显了,埃拉托斯特尼的筛子将是一个好消息算法确实好得多!我只能选择一个答案,但你们都很有帮助,谢谢!
while (j < (i / 2 + 1)) {   
                if ((i % j) == 0) {
                    iPrime = false;

                    //System.out.println(j + " is a factor of " + i);
                    break;
                }
                j++;
            }