Создание гистограммы случайных чисел с использованием Java - PullRequest
0 голосов
/ 18 ноября 2009

Гистограмма

--------------------------------------------------------
  1 ****(4)
  2 ******(6)
  3 ***********(11)
  4 *****************(17)
  5 **************************(26)
  6 *************************(25)
  7 *******(7)
  8 ***(3)
  9 (0)
 10 *(1)
--------------------------------------------------------

в основном выше, это то, что нужно сделать моей программе ... я пропускаю что-то где-нибудь, любая помощь будет великолепна

import java.util.Random; 
public class Histogram
{

    /*This is a program to generate random number histogram between
    1 and 100 and generate a table */

    public static void main(String args[])
    {

        int [] randarray = new int [80];
        Random random = new Random();
        System.out.println("Histogram");
        System.out.println("---------");

        int i ;
        for ( i = 0; i<randarray.length;i++)
        {   
            int temp = random.nextInt(100); //random numbers up to number value 100
            randarray[i] = temp;

        }

        int [] histo = new int [10];
        for ( i = 0; i<10; i++)
        {
            /* %03d\t, this generates the random numbers to
            three decimal places so the numbers are generated
            with a full number or number with 00's or one 0*/


            if (randarray[i] <= 10) {
                histo[i] = histo[i] + 1;
            //System.out.println("*");
            }
            else if ( randarray[i] <= 20){
            histo[i] = histo[i] + 1;
            }
            else if (randarray[i] <= 30){
            histo[i] = histo[i] + 1;
            }
            else if ( randarray[i] <= 40){
            histo[i] = histo[i] + 1;
            }
            else if (randarray[i] <= 50){
            histo[i] = histo[i] + 1;
            }
            else if ( randarray[i] <=60){
            histo[i] = histo[i] + 1;
            }
            else if ( randarray[i] <=70){
            histo[i] = histo[i] + 1;
            }
            else if ( randarray[i] <=80){
            histo[i] = histo[i] + 1;
            }
            else if ( randarray[i] <=90){
            histo[i] = histo[i] + 1;
            }
            else if ( randarray[i] <=100){
            histo[i] = histo[i] + 1;
            }

            switch (randarray[i])
            {
            case 1: System.out.print("0-10 | "); break;
            case 2: System.out.print("11-20 | "); break;
            case 3: System.out.print("21-30 | "); break;
            case 4: System.out.print("31-40 | "); break;
            case 5: System.out.print("41-50 | "); break;
            case 6: System.out.print("51-60 | "); break;
            case 7: System.out.print("61-70 | "); break;
            case 8: System.out.print("71-80 | "); break;
            case 9: System.out.print("81-90 | "); break;
            case 10: System.out.print("91-100 | "); 
            }
                for (int i = 0; i < 80; i++)
            {
              randomNumber = random.nextInt(100)
              index = (randomNumber - 1) / 2;
              histo[index]++;
            }
    }
   }
 }

Ответы [ 5 ]

1 голос
/ 19 ноября 2009

Ваши случайные данные содержат 80 значений, но вы перебираете только первые 10. Вы должны перебирать все 80. Вы должны использовать histo [1], histo [2] и т. Д. Вместо histo [i].

Кроме того, весь большой блок переключателей можно упростить до

histo[randarray[i] / 10]++;

И вместо того, чтобы создать randarray, а затем перебрать его, вы можете просто сделать это:

for(int i = 0; i < 80; i++)
{
    histo[random.nextInt(100) / 10]++;
}
0 голосов
/ 19 ноября 2009

Еще один момент, на который следует обратить внимание: ваша гистограмма будет плоской, равномерной, а не нормальной, как показано в вашем вопросе.

0 голосов
/ 19 ноября 2009

Ваш последний цикл for не скомпилируется - там много синтаксических ошибок.

Вам нужно заполнить шипы случайными числами, затем распечатать их.

Вы хотите распечатать счетчики в вашем массиве исторических данных в каждом операторе case перед тем, как разбить.

Удачи, если вы продолжите изучать программирование!

0 голосов
/ 19 ноября 2009

Вы просматриваете только 10 раз, хотя в вашем массиве 80 случайных чисел.

Эта строка также имеет недостатки. Вы не хотите использовать одну и ту же переменную-счетчик для прохода по массиву и определения того, какой столбец гистограммы нужно увеличивать.

 if (randarray[i] <= 10) {
                        histo[i] = histo[i] + 1;

UPDATE:

Вы должны попытаться придумать алгоритм для преобразования случайного значения в корзину, поскольку ваше решение не масштабируемо, и вы привыкнете к вредным привычкам программирования.

0 голосов
/ 18 ноября 2009

Если я правильно понял, то я думаю, что ваше утверждение switch испорчено.

Ваши значения randarray взяты из 0 < randarray[i] < 100, но вы даете значения до 10 для вашего switch. Это, вероятно, скинул бы что-нибудь.

Только мое предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...