C # увеличивает Int в массиве на основе индекса в другом массиве - PullRequest
0 голосов
/ 21 сентября 2018

Этот вопрос касается проблемы с домашним заданием при программировании на C #.Цель программы - получить массив из 20 целых чисел от 0 до 9, а затем получить еще один массив из 20 элементов, который увеличивается (на единицу) по индексу, в котором первое число 7 появляется в первом массиве.В приведенном ниже коде у меня есть массив с именем 'values', который генерирует случайные числа.Второй массив под названием «семерки» имеет 20 нулей, которые можно увеличить на единицу, если первые 7 в массиве значений найдены по соответствующему индексу.Моя проблема в том, что я не могу получить второй массив для увеличения.Массив значений правильно генерирует числа, но массив семерок остается со всеми нулями.Любые предложения о том, как получить индекс «семерок» для увеличения, если первые 7 найдены в «значениях»?

class Program
{
    static void Main(string[] args)
    {
        int[] values = new int[20];
        int[] sevens = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0 };

        Random random = new Random();
        int randValue;
        int count = 0;

        //Fills values with random integers between 0-9
        while (count < values.Length)
        {
            randValue = random.Next(10);
            values[count] = randValue;
            count++;
        }

        //Displays the contents of values
        int valuesDisplayCount = 0;
        while (valuesDisplayCount < values.Length)
        {
            Console.WriteLine("Array position {0} is {1}", valuesDisplayCount + 1, values[valuesDisplayCount]);
            valuesDisplayCount++;
        }

        while (valuesDisplayCount < values.Length)
        {
            if(values[valuesDisplayCount] == 7)
            {
                sevens[valuesDisplayCount]++;
                break;
            }
            valuesDisplayCount++;
        }

        //Displays the contents of sevens
        int sevensDisplayCount = 0;
        while (sevensDisplayCount < sevens.Length)
        {
            Console.WriteLine("Number of 7s at position {0}: {1} ", sevensDisplayCount + 1, sevens[sevensDisplayCount]);
            sevensDisplayCount++;
        }
        Console.ReadLine();
    }
}

1 Ответ

0 голосов
/ 21 сентября 2018

Проблема здесь в том, что вы не сбрасываете переменную valuesDisplayCount обратно в 0 перед выполнением второго цикла while, который ее использует.Поскольку эта переменная только что использовалась в предыдущем цикле, ее значение уже равно values.Length, поэтому ваш второй цикл while никогда не запускается.

Чтобы это исправить, просто добавьте valuesDisplayCount = 0; перед вторым while цикл, который использует эту переменную.


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

Таким образом, ваш код будет выглядеть следующим образом:

int[] values = new int[20];
int[] sevens = new int[20];

Random random = new Random();

//Fills values with random integers between 0-9
for (int count = 0; count < values.Length; count++)
{
    values[count] = random.Next(10);
}

//Display the contents of 'values'
for (int valuesDisplayCount = 0; valuesDisplayCount < values.Length; valuesDisplayCount++)
{
    Console.WriteLine("Array position {0} is {1}", valuesDisplayCount + 1, 
        values[valuesDisplayCount]);
}

// Increment indexes in 'sevens' whose corresponding index in 'values' is 7
for (int valuesDisplayCount = 0; valuesDisplayCount < values.Length; valuesDisplayCount++)
{
    if (values[valuesDisplayCount] == 7)
    {
        sevens[valuesDisplayCount]++;
        break; // Only increment at the first position, so exit the for loop
    }
}

//Display the contents of 'sevens'
for (int sevensDisplayCount = 0; sevensDisplayCount < sevens.Length; sevensDisplayCount++)
{
    Console.WriteLine("Number of 7s at position {0}: {1} ", sevensDisplayCount + 1,
        sevens[sevensDisplayCount]);
}

Console.ReadLine();
...