Java 循环不';不要停下来,不要';不能正确回答模块的问题
所以,我有我的代码,基本上当取某个数时,它会证明模块的结果是否等于0,如果是这样,它会将其自身除以素数,否则它会转到下一个素数,并尝试得到模块是否等于0。。。如果它在11之前所有的数字都失败了,它会自己打印,然后,它会打破循环。。。问题是,它要么不中断,要么即使结果为0,它也不会自己除以它,这是我的代码Java 循环不';不要停下来,不要';不能正确回答模块的问题,java,loops,module,break,Java,Loops,Module,Break,所以,我有我的代码,基本上当取某个数时,它会证明模块的结果是否等于0,如果是这样,它会将其自身除以素数,否则它会转到下一个素数,并尝试得到模块是否等于0。。。如果它在11之前所有的数字都失败了,它会自己打印,然后,它会打破循环。。。问题是,它要么不中断,要么即使结果为0,它也不会自己除以它,这是我的代码 import static java.lang.System.out; public class Problem3 { public static void main(String[] arg
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;
}
}
}
}
谢谢首先:您的switch语句不正确。在每个案例的结尾处,您缺少一个“制动器”;在您当前的代码中,2、3、4、7和11都会打印数字,而对于2、3、5、7,pfactor将是11。我假设‘case11’中的中断意味着中断循环,而实际上它中断了开关标签。要从开关内部断开循环,必须为其创建自定义标签:
loop: while(true){
...}
然后调用中断循环代码>从开关
如果要避免开关箱中的断路,可以使用箭头操作符:
switch(pfactor){
case 2 ->pfactor=3;
case 3 ->pfactor=5;
...
}
首先:您的switch语句不正确。在每个案例的结尾处,您缺少一个“制动器”;在您当前的代码中,2、3、4、7和11都会打印数字,而对于2、3、5、7,pfactor将是11。我假设‘case11’中的中断意味着中断循环,而实际上它中断了开关标签。要从开关内部断开循环,必须为其创建自定义标签:
loop: while(true){
...}
然后调用中断循环代码>从开关
如果要避免开关箱中的断路,可以使用箭头操作符:
switch(pfactor){
case 2 ->pfactor=3;
case 3 ->pfactor=5;
...
}
您正在脱离开关,而不是while
循环。您可以使用标志退出while循环或System.exit(0)退出程序。您正在脱离开关
,而不是在循环时脱离。您可以使用标志退出while循环或System.exit(0)
退出程序。案例11中的中断
指的是switch语句的范围,它将中断,而不是循环。此外,每隔一个案例,您就会缺少break
语句,这意味着如果您达到案例2,您也会经历案例3、5、7和11,最终得到pfactor=11代码>。这意味着,如果13195%2和13195%11都不是0,那么最终将进入一个无限循环
首先,您应该在每个案例之后添加break
语句,在案例11中,例如设置一个布尔标志,如果它为真,则中断循环
boolean breakOut=false;
while(true){
dfactor=pfactor;
if(num%dfactor==0.0){
num=num/dfactor;
}
否则{
开关(pfactor){
案例2:
p因子=3;
打破
案例3:
p因子=5;
打破
案例5:
p因子=7;
打破
案例7:
p因子=11;
打破
案例11:
out.println(num);
突破=正确;
打破
}
}
如果(突破){
打破
}
}
案例11中的中断
指的是switch语句的范围,它将中断,而不是循环。此外,每隔一个案例,您就会缺少break
语句,这意味着如果您达到案例2,您也会经历案例3、5、7和11,最终得到pfactor=11代码>。这意味着,如果13195%2和13195%11都不是0,那么最终将进入一个无限循环
首先,您应该在每个案例之后添加break
语句,在案例11中,例如设置一个布尔标志,如果它为真,则中断循环
boolean breakOut=false;
while(true){
dfactor=pfactor;
if(num%dfactor==0.0){
num=num/dfactor;
}
否则{
开关(pfactor){
案例2:
p因子=3;
打破
案例3:
p因子=5;
打破
案例5:
p因子=7;
打破
案例7:
p因子=11;
打破
案例11:
out.println(num);
突破=正确;
打破
}
}
如果(突破){
打破
}
}
除了其他人已经指出的问题之外。使用开关会使问题复杂化,请改用数组:
public class Problem3 {
public static void main(String[] args) {
double num = 13195;
int [] prime_numbers = new int []{2, 3, 5, 7, 11};
for(int p : prime_numbers){
while(num % p == 0){
num = num / p;
}
}
System.out.println(num);
}
}
如果你想添加100个新的素数,会发生什么?你去添加100个交换机分支了吗
把素数放在一个数组上,对它们进行迭代,然后进行必要的计算。除了其他人已经指出的问题之外。使用开关会使问题复杂化,请改用数组:
public class Problem3 {
public static void main(String[] args) {
double num = 13195;
int [] prime_numbers = new int []{2, 3, 5, 7, 11};
for(int p : prime_numbers){
while(num % p == 0){
num = num / p;
}
}
System.out.println(num);
}
}
如果你想添加100个新的素数,会发生什么?你去添加100个交换机分支了吗
将素数放在数组上,对其进行迭代,然后进行必要的计算。您可以这样做:
boolean continueLoop = true;
while(continueLoop){
...
}
当您想要退出循环时,您可以简单地说
continueLoop=false;
你可以这样做:
boolean continueLoop = true;
while(continueLoop){
...
}
当您想要退出循环时,您可以简单地说
continueLoop=false;