Вывод кол-ва цифр в массиве java

238
20 мая 2018, 06:10

Программа бросает 2 кости 20 раз. Нужно вывести в одномерном массиве сколько раз выпала каждая сумма (к примеру 1+1-2 3 раза и так до 12). Сделал бросание 20 раз и вывод суммы, но на подсчете слился, как можно исправить код?

Рабочий с подсчетом и выводом сумм:

package prr;
import java.util.Random;
    public class Base { 
           public static void main(String[] args) { 
          for(int i=0;i<20;i++)
            {
            int x,y;
            Random rand = new Random();
              x=rand.nextInt(6)+1;
              y=rand.nextInt(6)+1;
              System.out.println(x+y); 
            }
        }
        }

Нерабочий (в котором нужно чтобы считало сколько раз выпала сумма):

package prr;
    import java.util.Random;
    public class Base {
        public static void main(String[] args){
            Random rand = new Random();
                    int f[] = new int [11];
               for (int i = 0; i<20; i++){
                int x,y;
                  x=rand.nextInt(6)+1;
                  y=rand.nextInt(6)+1;
                  f=x+y; 
                 System.out.println ("Сумма\t Количество выпадений");
                 for(int i=0; i<f.lenght, i++){
                     System.out.println(i +"\t"+f[i]);
               }}
    }}
Answer 1

Желательно прикладывать текст ошибки, которая, похоже вот здесь: f=x+y;. Поскольку f - массив, то и обращаться вы должны не к нему, а к его непосредственному элементу по нужному индексу.

В вашем случае нужный индекс - сумма броска кубиков; но их лучше внести в массив обычной длины, поэтому их можно сдвинуть, обращаясь при записи к элементу на две позиции раньше. Для человеческого вывода можно использовать i+2. Нормализированный код:

Random rand = new Random();
int f[] = new int [11];
for (int i = 0; i<20; i++){
  int x,y;
  x=rand.nextInt(6)+1;
  y=rand.nextInt(6)+1;
  f[(x+y)-2]++; //Увеличение счётчика для конкретно этой пары (-2 индекса)
  System.out.println(i +"\t"+(x+y)); //Вывод суммы
  //Внутренний цикл вам не нужен. Вы можете прямо здесь выдавать значение после броска
}
for (int i = 0; i < f.length; i++) {
  System.out.println((i + 2) + ": " + f[i]);
}
READ ALSO
Преобразование примитивных типов в java нагружает процессор?

Преобразование примитивных типов в java нагружает процессор?

Собственно интересно как лучше поступать - создавать переменные с byte или с int, если известно что число никогда не будет больше границ byte;

169
Отправка request&#39;a с атрибутами

Отправка request'a с атрибутами

Есть Jsp страничка для авторизацииВ ней есть такой блок кода:

192
Есть поток в котором хранится дата. Вопрос, как отфильтровать все даты имеющие в своем составе на второй позиции с конца цифру кратную 3?

Есть поток в котором хранится дата. Вопрос, как отфильтровать все даты имеющие в своем составе на второй позиции с конца цифру кратную 3?

Можно просто отфильтровать поток (если не нужно считать 0 кратным 3, нужно будет добавить ещё один фильтр):

173
JavaFX, автообновление приложения

JavaFX, автообновление приложения

Имеется javaFX приложение, облачное хранилище и mySql бд

182