【问题标题】:For Loop doesn't workFor循环不起作用
【发布时间】:2013-12-31 19:38:45
【问题描述】:

我刚刚发布了一个关于我的 LCM 课程的问题,并且我更改了我的代码,但它仍然不起作用。 我插入 (10,4) 所以程序应该打印出 20 但它只打印出 0。也许初始化有问题?我将“int multiple”更改为几个不同的值,该方法打印出初始化为“multiple”的值。 这是我的固定代码。谢谢。

public class LCM {
public static int calcLCM(int num1, int num2){ //num1=10, num2=4; their LCM is 20
    //num1 has to be greator than num2
    int multiple=0;
    for(int i=1;i<=num1;i++)
    {
        if(num2==num1)
        {
            multiple=num2;
        }

        else if(num2*i>num1)
        {
            i++;
            num1=num1*i;
        }

        else if(num2*i<num1){
            i++;
            num2=num2*i;
        }
    }
    return multiple;
    }
}

【问题讨论】:

  • 你的previous question 和这个建议你需要先拿起一个编程参考;在开始编写代码之前花点时间阅读。
  • 那么循环不起作用怎么办?它应该可以很好地迭代(尽管您会遇到跳过值的情况,如果 num2 * i &lt; num1,这可能经常发生)。
  • 我认为你的算法有问题。我看不清楚你想从你的代码中使用什么算法。
  • 我没有看到循环有任何问题。循环内的逻辑一定有缺陷
  • 在您的逻辑中,当输入为 10、4 时,num2 永远不会等于 num1。因此,multiple 不会获得新值。所以它打印 0。试着找出逻辑来获得 LCM

标签: java for-loop


【解决方案1】:

您在循环内部以及循环条件本身中增加i。你不需要那个,它会导致你的循环跳过值。

另外,您将num1num2i 相乘。我认为你真正想要做的是你想用它们的原始值来增加它们。

【讨论】:

    【解决方案2】:

    算法稍作改动就会给出正确答案-

    public class LCM   
    {  
       public static int calcLCM(int num1, int num2)  
       {   
          //num1=10, num2=4; their LCM is 20  
          //num1 has to be greator than num2  
          int i=1;  
          while((num1*i)%num2!=0)  
          {  
            i++;  
          }  
          return num1*i;  
       }    
    
           public static void main(String[] args)   
       {  
        System.out.println(calcLCM(10,2));  
       }  
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 2018-04-22
      • 2016-05-13
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多