我需要在用户指定的任意两个值之间生成指定数量的随机整数(例如,10到20之间的12个数字),然后计算数字的平均值。 问题是,如果我要求它生成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

===============>>#1 票数:3

Java数组基于零。 在这里,您将第一个数组元素保留为其默认值0 更换

for (x = 1 ; x <= n-1 ; x++) 

for (x = 0 ; x < n ; x++) 

编辑:回答问题(从现在删除的评论)为什么这不会产生最小值和最大值之间的值

max * Math.random () + min

Math.random生成介于0.01.0之间的双精度值。 因此,例如,最小值为90且最大值为100将产生介于90190之间的数字(!)。 要限制您需要的最小值和最大值之间的值

min + Math.random() * (max - min)
 ^    |_________________________|                          
 |                 |
90       value between 0 - 10     

===============>>#2 票数:1

Java数组开始索引为0.此外,您的循环退出一个索引short。 因此,当n == 6时,您的条件是“x <= 5”,循环退出。 尝试这个:

for ( x = 0; x < n; x++ {
   // stuff
}

  ask by Wickeddreams translate from so

未解决问题?本站智能推荐: