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;iif((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++;
}