#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));