Java “获取平均值”;30“;2随机数
我试图得到2个随机数的平均值。平均值应为30,第一个数字应小于第二个数字。然而,我被困在循环函数中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();
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。虽然我很累,但我还是对你的答案投了赞成票。