Что-то не так с моим вложенным циклом for? подсчет и увеличение значений массивов

#java #arrays #for-loop #random #nested

#java #массивы #цикл for #Случайный #вложенный

Вопрос:

Итак, я генерирую 100 чисел в диапазоне от 0 до 9. Я храню эти 100 чисел в массиве с именем ‘array’. Тогда у меня есть массив с именем ‘count’. Он состоит из 10 элементов, и я хотел проверить следующее: для каждого элемента в «массиве», если он равен 0-9, тогда подсчет [0-9] увеличивается на 1, подсчет [0] = сколько раз появляется число 0 и так далее count [1] = 1, count [2] =2… . Я просто продолжаю получать вывод около 20 тыс. чисел, и я полагаю? сумма каждого элемента?, понятия не имею, почему. Мне было интересно, есть ли что-то серьезное в моем цикле for?

 import java.util.*;

class RandomInt {
    public static void main(String[] args) {
        int size = 100;
        int max = 10;
        int[] array = new int[size];
        int[] count = new int[max]; //count[0,0,0,0,0,0,0,0,0,0]
        int loop = 0;

        Random generator = new Random();


        for (int i = 0; i < size; i  ) {
            array[i] = generator.nextInt(max); // Generates 100 random numbers between 0 and 9 and stores them in array[]
            System.out.print(array[i]);
            for (int x = 0; x < size; x  ) {// loop through 10 elements in count
                for(int j = 0; j < 10; j  ){ //loop through 100 elements in array
                    if (array[x] == j) {// loop through each 100 elements of array[x] and if element array[x] = value
                        count[j]  = 1; // then count[x] = x   1
                        System.out.print(count[j]);
                    }
                }
            }
        }

        System.out.println("0 appears "   count[0]   " times.");
    }
}
  

Комментарии:

1. System.out.print(array[i]); эта строка была предназначена только для проверки, работает ли мой массив. И это произошло.

Ответ №1:

Ваш логин идеален, единственная ошибка, которую я обнаружил, это скобки ……..!

Сгенерируйте числа, используя первый цикл, а затем подсчитайте количество вхождений, используя другой цикл for .

Вот модифицированная версия вашего кода, которая генерирует 10 чисел и подсчитывает количество встречаемости отдельных чисел…..

 public class RandomInt {
 public static void main(String[] args) {
    int size = 10;
    int max = 10;
    int[] array = new int[size];
    int[] count = new int[max]; //count[0,0,0,0,0,0,0,0,0,0]
    int loop = 0;

    Random generator = new Random();


    for (int i = 0; i < size; i  ) 
    {
        array[i] = generator.nextInt(max); // Generates 100 random numbers between 0 and 9 and stores them in array[]
        System.out.print(array[i] " ");
    }

    for (int x = 0; x < size; x  ) 
    {// loop through 10 elements in count
            for(int j = 0; j < 10; j  )
            { //loop through 100 elements in array
                if (array[x] == j) 
                {// loop through each 100 elements of array[x] and if element array[x] = value
                    count[j]  = 1; // then count[x] = x   1
                    //System.out.print(count[j]);
                }
            }

    }

    System.out.println("3 appears "   count[3]   " times.");
}
  

}

Комментарии:

1. Ха, ты бы посмотрел на это. Спасибо! 🙂 Должен был это видеть. Но, эй, я новичок в Java, и я делаю ошибки 🙂 Спасибо за помощь, и я ценю все комментарии, они мне очень помогают. 🙂 * я вложил 3 цикла for, когда у меня должно было быть 2, и выполняю по 1 шагу за раз (каждая задача за раз).

Ответ №2:

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

 for(int i=0; i<size; i  ){
   int num = generator.nextInt(max);
   array[i] = num;
   count[num]  ;
}
  

Один цикл, увеличивающий количество для каждого числа по мере его появления. Возможно, вам потребуется убедиться, что все записи в count начинаются с 0, но даже тогда дополнительный цикл через 10 записей выполняется НАМНОГО быстрее.

Ответ №3:

Чтобы увеличить ваш счетчик, вам не нужно иметь два вложенных цикла for . Вместо этого вы можете использовать значение array[x] в качестве своего счетчика.

 for (int i = 0; i < size; i  ) {
    count[array[i]]  
}
  

Ответ №4:

Вы вложили свой цикл подсчета в свой цикл генерации случайных чисел. Переместите часть подсчета наружу.

Редактировать: причина, по которой вы получаете как 20k или любые другие экземпляры нуля, заключается в том, что когда вы устанавливаете array[0] случайное значение, вы также проверяете, сколько экземпляров 0 находится в array[1] to array[99] .

Комментарии:

1. Голосование, потому что вы обнаружили реальную проблему с его методом. Я бы все равно предложил заменить подход, но на самом деле это сработает.

Ответ №5:

Вероятно, вам не следует выполнять подсчет, пока вы не закончите присваивать свои номера, но вот как вы могли бы. Обратите внимание, что вы хотите, чтобы значение at array[i] было вашим индексом для подсчета.

 for (int i = 0; i < size; i  ) {
  array[i] = generator.nextInt(max); // Generates random numbers
  count[array[i]]  ;
}
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(count));