Подсчитать количество вхождений в массив со случайными числами без методов или списка в C#

#c# #arrays #random

#c# #массивы #Случайный

Вопрос:

Я пытаюсь решить упражнение на C # следующим образом:

Напишите программу, которая генерирует 20 случайных целых чисел от 0 до 9 и отображает количество для каждого числа. Используйте массив из десяти целых чисел, скажем, counts, для хранения подсчетов количества 0, 1, …, 9.)

Это то, что я придумал для такого рода работы, но у меня проблема с тем, что 0 постоянно считают 1 лишним.

 using System.Collections.Generic;
using System.Text;

namespace ArrayExercises
{
    class TaskFive
    {
        public static void FindNumberCount()
        {

            int c0=0,c1=02,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0;
            int[] arr = new int[20];
            Random rand = new Random();
            Console.WriteLine("Numbers generated ");
            for (int i = 0; i < 19; i  )
            {
                arr[i] = rand.Next(0, 10);
                Console.WriteLine(arr[i]);
            }
            foreach(int number in arr)
            {
                 if (number == 0) { c0  ; }
            else if (number == 1) { c1  ; }
            else if (number == 2) { c2  ; }
            else if (number == 3) { c3  ; }
            else if (number == 4) { c4  ; }
            else if (number == 5) { c5  ; }
            else if (number == 6) { c6  ; }
            else if (number == 7) { c7  ; }
            else if (number == 8) { c8  ; }
            else if (number == 9) { c9  ; }

            }
            Console.WriteLine
            (
              $"Number of 0's: {c0} n"  
              $"Number of 1's: {c1} n"  
              $"Number of 2's: {c2} n"  
              $"Number of 3's: {c3} n"  
              $"Number of 4's: {c4} n"  
              $"Number of 5's: {c5} n"  
              $"Number of 6's: {c6} n"  
              $"Number of 7's: {c7} n"  
              $"Number of 8's: {c8} n"  
              $"Number of 9's: {c9}"
            );
        }
    }
}
  

Заранее спасибо 🙂

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

1. 1. Почему c1=02? 2. Ваше решение — это не то, о чем вас просили: «Используйте массив из десяти целых чисел, скажем, counts, для хранения подсчетов ….»

2. Это была опечатка. Спасибо, что указали на это 👍

Ответ №1:

Вы могли бы сократить его следующим образом

     public static void FindNumberCount()
    {
        int[] count = new int[10];
        Random rand = new Random();
        int[] arr = new int[20];
        for (int i = 0; i < arr.Length; i  )
        {
            arr[i] = rand.Next(0, 10);
            Console.WriteLine(arr[i]);
            count[arr[i]]  ;
        }
        for (int i = 0; i < count.Length; i  )
        {
                Console.WriteLine($"Number of {i}'s: {count[i]}");

        }
       
    }
  

Если вы хотите нарисовать 20 чисел, вам следует использовать for (int i = 0; i < 20; i ), а не 19.

Ответ №2:

 int[] counts = new int[10];
int[] numbers = new int[20];


var random = new Random();
for (int i = 0; i < numbers.Length; i  )
{        
    // Generate random numbers
    numbers[i] = random.Next(0, 9);
    // Increment the count of the generated number
    counts[numbers[i]]  ;
}
  

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

1. Для меня это имеет смысл. Миллион благодарностей 👍

Ответ №3:

цикл for вы используете всего 19 раз. Вы должны изменить «i < 19» на «i < 20». В вашей программе цикл for оставляет последнему int в массиве значение по умолчанию (0), это также объясняет, почему у вас всегда есть еще один ноль. Надеюсь, это помогло.

Ответ №4:

Проблемы находятся в этой строке

 for (int i = 0; i < 19; i  )
  

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

  for (int i = 0; i <= 19; i  )
  

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

1. Спасибо Ansil, который показал мне логику моей ошибки. Я кое-чему там научился 👍

Ответ №5:

Условием остановки первого цикла for должно быть i<20. Тогда ваша программа должна работать.

Вот как я бы решил это:

  static void Main(string[] args)
 {
     Random random = new Random();

     //Fill array with random numbers
     int[] array = new int[20];
     for (int i = 0; i < array.Length; i  )
         array[i] = random.Next(0, 10);

     //Count how many times a number occurs
     int[] numberCounts = new int[10];
     for (int i = 0; i < array.Length; i  )
         numberCounts[array[i]]  ;

     //Print the count of the numbers
     for(int i = 0; i < numberCounts.Length; i  )
         Console.WriteLine("Number of "   i   "'s: "   numberCounts[i]);

     //Keep the console open
     Console.ReadLine();
 }
  

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

1. Это было очень подробно от вас, Хенрик. Большое вам спасибо 👍