Java “获取平均值”;30“;2随机数

Java “获取平均值”;30“;2随机数,java,random,for-loop,while-loop,average,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();

我试图得到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);
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪用户输入=新扫描仪(System.in);
字符串响应;
System.out.println(“输入OK”);
respond=user_input.next();
随机平均数();
}
公共静态平均值(){
随机=新随机();
整数平均=30;
int a=random.nextInt(100);//随机范围
int b=随机的nextInt(100);
系统输出打印项次(“随机a”+a);
系统输出打印项次(“随机b”+b);
而(a>b){
a=random.nextInt(100);//随机范围
b=随机。nextInt(100);
系统输出打印项次(“随机a”+a);
系统输出打印项次(“随机b”+b);
}
int c=(a+b)/2;

当(c>average | | c时,您永远不会更新
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);
}
注为:


由于
(a+b)/2=30
,如果你知道
a
,你就可以解决
b
。当简单地
b=60-a
使用
边做边做
循环时,没有任何消耗CPU周期的意义,如下所示:

    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); 
    a = random.nextInt(60);
    b = 60 - a;
    System.out.println("random a " +a);
    System.out.println("random b "+b); 
请注意,
c
没有正确计算,因为它忽略了分数,例如,如果a=25和b=36,c将为30,但实际平均值为30.5

编辑:最佳解决方案可能是导出一个随机数,然后只导出第二个随机数,而不使用任何循环,如下所示:

    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); 
    a = random.nextInt(60);
    b = 60 - a;
    System.out.println("random a " +a);
    System.out.println("random b "+b); 

因为第一个数字是随机的,第二个是随机的:)

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

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

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

您知道,如果您的第一个随机数选择为30,您仍然会有冗余数据?因为您选择了两个随机数,另一个也必须为30。应用
while((a+b)==30)
并迭代循环如果希望平均值始终正好为30,则只有第一个数字可以是真正随机的。第二个数字始终需要是(60-{1st number})你所说的冗余数据是什么意思?你到底希望输出什么?@注意@radai所说的。这个程序有些毫无意义。你总是可以从一个随机的
a
(a+b)中计算
b
/2=30
给定
a=a
,求解
b
。使用循环和高达99的随机范围是多余的请看我的答案。@PeterLawrey你读了我的答案吗?我在结尾说这是多余的。我只是在一开始就解决了他的问题。你可以注意到随机范围应该是[0,30]并给出一个解决方案。@PeterLawrey-true。虽然我很累,但我还是对你的答案投了赞成票。