Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环不';不要停下来,不要';不能正确回答模块的问题_Java_Loops_Module_Break - Fatal编程技术网

Java 循环不';不要停下来,不要';不能正确回答模块的问题

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

所以,我有我的代码,基本上当取某个数时,它会证明模块的结果是否等于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;
            }
        }
    }
}

谢谢首先:您的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;