获得2个随机数的平均值“30”

时间:2013-01-05 05:29:11

标签: java random for-loop while-loop average

我试图获得2个随机数的平均值。平均值应为30,第一个数字应小于第二个数字。但是,我陷入了循环功能。

public static void main(String[] args) {
    Scanner user_input = new Scanner(System.in);
    String respond;
    System.out.println("enter OK");
    respond = user_input.next();
    randomAverage();

}

public static void randomAverage(){
    Random random = new Random();
    int average = 30;
    int a = random.nextInt(100); //random range
    int b = random.nextInt(100);
    System.out.println("random a " +a);
    System.out.println("random b "+b);
    while(a>b){
        a = random.nextInt(100); //random range
        b = random.nextInt(100);
        System.out.println("random a " +a);
        System.out.println("random b "+b);
    }
    int c = (a+b)/2;
    while (c>average || c<average){
        a = random.nextInt(100); //random range
        b = random.nextInt(100);
        System.out.println("random a " +a);
        System.out.println("random b "+b);
    }
}

我尝试了上面的功能,但是我得到了冗余数据

任何人都可以帮助我

我刚刚开始学习这门语言

3 个答案:

答案 0 :(得分:1)

您永远不会更新c的价值。

您的第二个循环应该类似于:

int c = (a+b)/2;
while (c != average) {              // Simpler conditional
    a = random.nextInt(100);
    b = random.nextInt(100);
    c = (a+b)/2;                    // Must update this.
    System.out.println("random a " +a);
    System.out.println("random b "+b);
}

注意为radai mentioned

(a+b)/2 = 30以来,如果您知道a,则可以为b解决问题。仅仅b = 60 - a时无法消耗CPU周期。

答案 1 :(得分:1)

您不需要循环,因为第二个值由第一个确定。最小值的范围是0到30,第二个值的范围是30到60.

int first = rand.nextInt(31);
int second = 60 - first;

这将为您提供两个值,平均值为30,其中第一个值较低。

答案 2 :(得分:0)

使用do-while循环如下:

    do{
         a = random.nextInt(100);
         b = random.nextInt(100);
         c = (a+b)/2; 
    }while(c != 30 || a >=b);
    System.out.println("random a " +a);
    System.out.println("random b "+b); 

请注意c未正确计算,因为它省略了分数,例如如果a = 25且b = 36,则c为30,但实际平均值为30.5。

编辑:最佳解决方案可能是派生一个随机数,然后在没有任何循环的情况下导出第二个随机数,如下所示:

    a = random.nextInt(60);
    b = 60 - a;
    System.out.println("random a " +a);
    System.out.println("random b "+b); 

由于第一个数字是随机数,第二个数字是随机的:)