2013-01-05 17 views
0

我想获得2个随机数的平均值。平均值应该是30,第一个数字应该小于第二个数字。但是,我卡在循环功能。得到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); 
    } 
} 

我尝试了上述功能,但我得到了冗余数据

有人能帮助我

我刚开始学习这门语言

+1

你知道,如果你的第一个随机数字是30,你会有冗余数据吗?既然你选择了两个随机数,另一个必须是30。 – fge

+0

apply'while((a + b)== 30)'并且迭代你的循环 – Milind

+2

如果你想要平均值总是正好30,那么只有第一个数字可以是真正的随机数。第二个数字总是需要(60- {1st number}) – radai

回答

1

你永远更新的价值c

你的第二个循环应该是这个样子:

注为radai mentioned

由于(a+b)/2 = 30,如果你知道你a可以解决b。当简单地b = 60 - a没有意义燃烧CPU周期。

+0

谢谢,它的工作:) –

+1

@请注意@radai说的。这个程序有点毫无意义。你可以**总是**从随机的'a'计算'b'。 '(a + b)/ 2 = 30'给定'a = A',解决'b'。 –

+0

使用一个循环和一个随机范围高达99是矫枉过正看到我的答案。 –

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); 

由于第一数量是随机的,第二导出随机:)

1

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

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

这会给你平均为30,其中所述第一低两个值。