我需要在any之间生成指定数量的随机整数 用户指定的两个值(例如,12个数字都在10到20之间),然后计算数字的平均值。 问题是,如果我要求它生成10个数字,它将只生成9(显示在输出中。) 此外,如果我输入100的最大范围和90的最小范围,程序仍然会产生超过最大范围的#147,等等......我搞乱了随机数生成器吗?有人可以帮忙吗?
这是我到目前为止的代码:
public class ArrayRandom
{
static Console c; // The output console
public static void main (String[] args)
{
c = new Console ();
DecimalFormat y = new DecimalFormat ("###.##");
c.println ("How many integers would you like to generate?");
int n = c.readInt ();
c.println ("What is the maximum value for these numbers?");
int max = c.readInt ();
c.println ("What is the minimum value for these numbers?");
int min = c.readInt ();
int numbers[] = new int [n];
int x;
double sum = 0;
double average = 0;
//n = number of random integers generated
for (x = 1 ; x <= n-1 ; x++)
{
numbers [x] = (int) (max * Math.random () + min);
}
for (x = 1 ; x <= n-1 ; x++)
{
sum += numbers [x];
average = sum / n-1);
}
c.println ("The sum of the numbers is: " + sum);
c.println ("The average of the numbers is: " + y.format(average));
c.println ("Here are all the numbers:");
for (x = 1 ; x <= n-1 ; x++)
{
c.println (numbers [x]); //print all numbers in array
}
} // main method
} // ArrayRandom class
答案 0 :(得分:3)
Java数组基于零。在这里,您将第一个数组元素保留为其默认值0
。取代
for (x = 1 ; x <= n-1 ; x++)
带
for (x = 0 ; x < n ; x++)
编辑:回答问题(从现在删除的评论),了解为什么这不会产生最小值和最大值之间的值
max * Math.random () + min
Math.random会在0.0
和1.0
之间生成双倍值。例如,90
和100
的最小值将生成90
和190
(!)之间的数字。要限制最小值和最大值之间的值,您需要
min + Math.random() * (max - min)
^ |_________________________|
| |
90 value between 0 - 10
答案 1 :(得分:1)
Java数组开始索引为0.此外,您的循环正在退出一个索引short。因此,当n == 6时,您的条件是,&#34; x&lt; = 5&#34;,并且循环退出。试试这个:
for ( x = 0; x < n; x++ {
// stuff
}