所以,我有我的代码,基本上,当取某个数时,它会证明模的结果是否等于0,如果是这样,它会用素数除以它自己,否则它会转到下一个素数,并尝试得到模是否等于0。。。如果它在11之前所有的数字都失败了,它将自己打印出来,然后,它将打破循环。。。问题是,它要么不中断,要么即使结果是0,它也不会自己除以,这是我的代码。。。
import static java.lang.System.out;
public class Problem3 {
public static void main(String[] args) {
int pfactor = 2;
double num = 13195;
double dfactor;
while (true) {
dfactor = pfactor;
if (num % dfactor == 0.0) {
num = num / dfactor;
}
else {
switch (pfactor) {
case 2:
pfactor = 3;
case 3:
pfactor = 5;
case 5:
pfactor = 7;
case 7:
pfactor = 11;
case 11:
out.println(num);
break;
}
}
}
}
谢谢
5条答案
按热度按时间ewm0tg9j1#
你可以这样做:
当你想退出循环时,你可以简单地说
eiee3dmh2#
你正在冲出困境
switch
,而不是来自while
循环。可以使用标志退出while循环或System.exit(0);
退出程序。tv6aics13#
首先:你的switch语句不正确。你在每一个案例的结尾都少了一个“刹车”;在当前代码中,2、3、4、7和11最后都会打印出数字,而对于2、3、5、7,pfactor将是11。我假设“case11”中的中断意味着中断循环,而实际上它中断了开关标签。要从开关内部断开循环,必须为其创建自定义标签:
然后打电话
break loop;
从开关上。如果要避免开关箱中的断开,可以改用箭头运算符:
wfsdck304#
这个
break
在您的case中,11引用switch语句的作用域并将跳出它,而不是您的循环。另外,你失踪了break
在每一个案例之后的陈述,意味着如果你达到案例2,你也会经历案例3、5、7和11,最终以pfactor = 11;
. 这意味着,如果13195%2和13195%11都不是0,那么您将进入一个无限循环。首先你应该加上
break
在每个case后面的语句,在case11中设置一个boolean标志,如果为true,则中断循环。yzxexxkh5#
除了其他人已经指出的问题。使用switch会使问题复杂化,请改用数组:
如果你想加上100个新素数会怎么样?你去加100个交换机分支了吗?
把素数放在一个数组上,对它们进行迭代,然后进行必要的计算。