【问题标题】:Java: Counting Times it takes to generate a given numberJava:计算生成给定数字所需的时间
【发布时间】:2013-10-26 22:39:37
【问题描述】:

所以我正在尝试进一步了解循环,并尝试满足由驱动程序运行的循环程序。

要满足的最终循环应该在两个给定边界之间生成一个随机数,从驱动程序给定,并运行直到随机数等于下限。目前,我陷入了无限循环。

 public void loop4()
{
    System.out.println("Loop 4 Output, lowerBound = " + lowerBound +
                        " upperBound = " + upperBound);

    for(int i = 0;i < 10; i++){ //First loop should take 5 trys
        int num = (int) (Math.random()* (upperBound - lowerBound));
        if(num == lowerBound){
            System.out.println(i);
            break;    
        }
        else{}
    }
    System.out.println("-------------");
}

来自司机:

loopTest.setBounds(9, 9);
    loopTest.loop4();

    loopTest.setBounds(100, 200);
    loopTest.loop4();
    loopTest.loop4();
    loopTest.loop4();

    loopTest.setBounds(100, 50);
    loopTest.loop4();

所以,当然,我只是想打印计数器 i,一次 num == lowerBound。但是,如上所述,我要么陷入无限循环(当我从 i 中取出限制时,在这种情况下它是 10,只是为了测试),或者它完全忽略循环,我'我无法识别问题。

谢谢

【问题讨论】:

  • 我要么陷入无限循环,要么完全忽略循环这是不可能的:在最坏的情况下,您的代码最多会有 50 次迭代这里没有条件进行无限循环

标签: java loops for-loop infinite-loop nested-loops


【解决方案1】:

我推荐你使用随机库:

import java.util.Random;

public static void loop4()
{
    Random rand = new Random();
    int lowerBound = 100;
    int upperBound = 102;
    System.out.println("Loop 4 Output, lowerBound = " + lowerBound +
                        " upperBound = " + upperBound);

    for(int i = 0; i < 10; i++){
        // Next line was modified so you get values between lowerBound and upperBound
        int num = lowerBound + rand.nextInt(upperBound - lowerBound + 1); 
        System.out.println(num);
        if(num == lowerBound){
            System.out.println(i);
            break;    
        }
    }
    System.out.println("-------------");
}

【讨论】:

    【解决方案2】:

    这并不是解决此问题的正确方法。由于您试图循环不确定的次数,调用一个方法来循环 10 次并不是解决它的最佳方法。

    在这种情况下,“while”循环会更有益,例如:

        public void loop4
        {
            int num;
            int i = 0;
            while (num != lowerbound)
            {
            num = (int) (Math.random()* (upperBound - ++lowerBound));
            i++;
            }
    System.out.println(i);
        }
    

    这样,你只需调用一次循环

    【讨论】:

      【解决方案3】:

      upperBound - lowerBound = 50 - 100 用于最新测试。 所以你会得到一个介于 -50 到 0(不包括在内)之间的值,并尝试将它与 100 进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-16
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 2020-11-22
        相关资源
        最近更新 更多