我试图获得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);
}
}
我尝试了上面的功能,但是我得到了冗余数据
任何人都可以帮助我
我刚刚开始学习这门语言
答案 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);
由于第一个数字是随机数,第二个数字是随机的:)