В вашем конструкторе у вас есть
int [] storeNumbers = new int [max];
Проблема здесь в том, что это создаст новую локальную переменную с тем же именем, что и у вашей переменной экземпляра, storeNumbers
.Кроме того, размер должен быть totalRandom
, а не max
.Вам нужно создать объект Random
, который вы будете использовать для генерации случайных чисел.Сложив это вместе, мы получим:
public BinSort (int nBins, int nSamples, int max) {
totalBins = nBins; //total # of bins, ie 2
totalRandom = nSamples; //total random number generated, ie 12
widthBin = (float) (max/totalBins); //ie 2
storeNumbers = new int [totalRandom];
Random rand = new Random();
for (int i = 0; i < totalRandom; i++) {
storeNumbers[i] = rand.nextInt(max);
}
}
Это сгенерирует totalRandom
случайные числа между 0
и max
(эксклюзив) и сохранит их в переменной экземпляра storeNumbers
.
Далее, в generateBins
у вас та же проблема с
int [] binCount = new int [totalBins];
, которая снова будет скрывать переменную вашего экземпляра binCount
.Бункер, в который попадает storeNumber
, будет задан как (int)(storeNumbers[i] / widthBin)
, и вам нужно увеличить результирующий лот на 1.
void generateBins()
{
binCount = new int[totalBins];
for (int i = 0; i < totalRandom; i++)
{
int bin = (int)(storeNumbers[i] / widthBin);
binCount[bin] += 1;
}
}
Наконец, до печати лотков.Эта строка
for (int j=0; j < binCount[j]; j ++)
должна быть
for (int j=0; j < binCount[i]; j ++)
Кроме того, вы должны использовать printf
для форматирования чисел, которые вы хотите напечатать.
void printBins()
{
for (int i = 0; i < binCount.length; i++)
{
for (int j = 0; j < binCount[i]; j++)
{
System.out.print("*");
}
float freq = (float)binCount[i] / totalRandom;
float binMin = i * widthBin;
float binMax = (i+1) * widthBin;
System.out.printf(" %d %.3f %.3f %.3f\n", binCount[i], freq, binMin, binMax);
}
}
Тест:
public static void main(String[] args)
{
BinSort bs = new BinSort(2, 12, 10);
bs.generateBins();
bs.printBins();
}
Вывод:
***** 5 0.417 0.000 5.000
******* 7 0.583 5.000 10.000
Я думаю, это то, что вы искали.
Обязательно сравните исходный код с приведенными выше изменениями и убедитесь, что вы понимаете, в чем заключались проблемы и почему эти изменения работают.