[英]Loop doesn't stop, and doesn't answer to a module correctly
所以,我有我的代碼,基本上當取某個數字時,它會證明模塊的結果是否等於 0,如果是這樣,它將自己除以素數,否則它將 go 到下一個素數,並嘗試獲取模塊是否等於 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。我假設“案例 11”中的中斷是為了打破循環,而實際上它破壞了開關 label。 要從交換機內部中斷循環,您必須為其創建自定義 label:
loop: while(true){
...}
然后調用break loop;
從開關。
如果你想避免在 switch case 中出現中斷,你可以使用箭頭操作符:
switch(pfactor){
case 2 ->pfactor=3;
case 3 ->pfactor=5;
...
}
您正在擺脫switch
,而不是來自while
循環。 您可以使用標志退出 while 循環或System.exit(0);
退出程序。
您的案例 11 中的break
是指 switch 語句的 scope ,並且會中斷它,而不是您的循環。 此外,您在每個其他案例之后都缺少break
語句,這意味着如果您到達案例 2,您還將 go 通過案例 3、5、7 和 11,最終以pfactor = 11;
. 這意味着,如果 13195 % 2 和 13195 % 11 都不是 0,那么您最終會陷入無限循環。
首先,您應該在每個案例之后添加break
語句,並在案例 11 中設置例如 boolean 標志,如果為真,則退出循環。
boolean breakOut = false;
while (true) {
dfactor = pfactor;
if (num % dfactor == 0.0) {
num = num / dfactor;
}
else {
switch (pfactor) {
case 2:
pfactor = 3;
break;
case 3:
pfactor = 5;
break;
case 5:
pfactor = 7;
break;
case 7:
pfactor = 11;
break;
case 11:
out.println(num);
breakOut = true;
break;
}
}
if (breakOut) {
break;
}
}
除了其他人已經指出的問題。 使用開關會使您復雜化,請改用數組:
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 個 switch 分支了嗎?
將素數放在一個數組上,對它們進行迭代,然后進行必要的計算。
你可以這樣做:
boolean continueLoop = true;
while(continueLoop){
...
}
當你想退出循環時,你可以簡單地說
continueLoop=false;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.