Как построить график вероятности используя printf Java
По состовленной вероятности нужно построить график используя оси X Y. Начало координат - левый верхний угол экрана, ось X - это левая граница экрана (направленная вниз) .Она соответствует суммам номиналов (5-30). Вот Y - верхняя строка консоли (направленная вдоль строки экранах). Она соответствует вероятности в нужном масштабе. Для Метки значение на графике использова символьный Вывод пробелов (или '_') и одного символа '*'. Начало каждой строки определяет точки на оси X со значениями 05,06, ..., 30. Масштабировать максимум Функции вероятностей на отметке 100-й позиции строками. Про саму задачу на вероятность: В эксперименте выбрасываются 5 игральных кубиков 10000 раз. Вывести таблицу вероятностей получения сумм номиналов от 5 до 30. Таблицу сделал, вероятности нашел. Вот как график нарисовать - не могу. Вот мой код :
int sum = 0;
int[] base = new int[30];
for (int j = 0; j < 1000000; j++) {
for (int i = 0; i < 5; i++)
sum += (int) (Math.random() * 6 + 1);
base[sum - 1] += 1;
sum = 0;
}
for (int i = 5; i <= 30; i++)
System.out.printf("%6d", i);
System.out.println();
for (int i = 4; i < 30; i++)
System.out.printf("%5.2f%%", (double) base[i] / 10000);
System.out.println("\n");
for (int i = 0; i <= 100; i++)
System.out.printf("%2d ", i);
System.out.println();
for (int i = 0; i < 100; i++) {
for (int j = 5; j <= 30; j++) {
}
}
for (int i = 5; i <= 30; i++)
System.out.printf("%2d\n", i);
```
Ответы (1 шт):
Вот код:
int sum = 0;
int[] base = new int[30];
for (int j = 0; j < 1000000; j++) {
for (int i = 0; i < 5; i++)
sum += (int) (Math.random() * 6 + 1);
base[sum - 1] += 1;
sum = 0;
}
String[][] text2D = new String[102][27];
int strW = 4; // Попробуй менять - Ширина ячейки по горизонаталии (в символах)
String grafickBorder = "#####"; // Попробуй менять
String grafick = "#####"; // Попробуй менять - Так же выглядит неплохо с "####" или "****"
text2D[0][0] = "№\\%"; // Правый Верхний угол
// Рисуем Край с процентами
for (int x = 1; x < text2D.length; x++) {
text2D[x][0] = (x-1) + "%";
}
// Рисуем Край с числами 5-30
for (int y = 1; y < text2D[0].length; y++) {
text2D[0][y] = (y+4) + " ";
}
// Созданием графика (Вариант №1)
/*for (int i = 0; i < base.length; i++) {
System.err.println(base[i]/10000);
try {
text2D[base[i]/10000 + 1][i+1] = grafickBorder;
} catch (ArrayIndexOutOfBoundsException e) {
}
}*/
// Созданием графика (Вариант №2)
for (int i = 0; i < base.length; i++) {
System.err.println(base[i]/10000);
try {
int id = base[i]/10000 + 1;
for (int j = id; j > 0; j--) {
text2D[j][i+1] = grafick;
}
text2D[id][i+1] = grafickBorder;
} catch (ArrayIndexOutOfBoundsException e) {
}
}
// Печать в консоль
for (int y = 0; y < text2D[0].length; y++) {
for (int x = 0; x < text2D.length; x++) {
String toPrint = text2D[x][y] == null ? " " : text2D[x][y];
for (int i = toPrint.length(); i < strW; i++)
toPrint = " " + toPrint;
System.out.print(toPrint);
}
System.out.println();
}
Выводит:
Если Созданием графика (Вариант №1):
№\% 0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% ...
5 #####
6 #####
7 #####
8 #####
9 #####
10 #####
11 #####
12 #####
13 #####
14 #####
15 #####
...
✔(Выбран) Если Созданием графика (Вариант №2):
№\% 0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% ...
5 #####
6 #####
7 #####
8 #####
9 #####
10 #####
11 #####
12 #####
13 #####
14 ##########
15 ###############
...