【问题标题】:Breaking a loop once the first value is found找到第一个值后中断循环
【发布时间】:2017-05-16 15:11:29
【问题描述】:

我有用于完成 Project Euler 任务之一的当前代码:

 public static void mod(int value){
     int[] modValues = {11,12,13,14,15,16,17,18,19,20};
     int y = 0;
     for(int x = 0; x < 10; x++){
         int originalValue = value;
         int modSum = value % modValues[x];
         if(modSum == 0){
             y += 1;
             if(y == 10){
               System.out.println(originalValue);
               break;
             }
          } 
     }
}

public static void main(String[] args) {
   final long startTime = System.nanoTime(); //<<<ignore//  
   int x;

   for(x = 0; x < Integer.MAX_VALUE; x++){
       mod(x);
   }
}

现在我的问题是,一旦从方法中找到第一个值 (232792560),如何让整个程序中断。我目前在if(y == 10){ break;} 的休息时间没有这样做。

【问题讨论】:

  • print 发生了吗,你的代码是否达到了break 语句?
  • 如果它在另一个方法中,你不能打破外循环。鉴于您有 3 行长的 main 方法,只是内联 mod 方法。然后您可以标记外循环outer: for(x = 0; x &lt; Integer.MAX_VALUE; x++){ 并将您的break; 更改为break outer;
  • 主函数内部的for循环是什么
  • 如果你想终止整个程序,可以使用System.exit(0);

标签: java break


【解决方案1】:
 public static int mod(int value){
        int[] modValues = {11,12,13,14,15,16,17,18,19,20};
        int y = 0;
         for(int x = 0; x < 10; x++){
            int originalValue = value;
            int modSum = value % modValues[x];
            if(modSum == 0){
                y += 1;
                if(y == 10){
                    System.out.println(originalValue);
                     return originalValue;

               }
            }
          }
        }
     public static void main(String[] args) {
            final long startTime = System.nanoTime(); //<<<ignore// 
            int x;       
             for(x = 0; x < Integer.MAX_VALUE; x++){
if(mod(x)==232792560){
 // now it will break so just break it 
break;
}

}
     }
}

【讨论】:

  • 这很有用,但是 232792560 的值是未知的。代码在那里找到该值,因此在编写代码时该值将不存在。我的错,需要进一步的上下文。
  • 如果这有助于您帮助他人,请接受答案
【解决方案2】:
public static void mod(int value)
 {
   int[] modValues = {11,12,13,14,15,16,17,18,19,20};
   int y = 0;
   for(int x = 0; x < 10 && y != 10; x++)
   {
     int originalValue = value;
     int modSum = value % modValues[x];
     if(modSum == 0)
     {
       y += 1;
       if(y == 10)
       {
         System.out.println(originalValue);
         break;
       }
     }
   }
 }

【讨论】:

  • 对不起,我没有正确理解您的第一个问题。我认为返回布尔值的@BillF 方法是正确的
猜你喜欢
  • 2022-01-09
  • 2015-01-13
  • 1970-01-01
  • 2015-09-07
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多