Попытка ввести пользовательский ввод и заполнить многомерный массив - PullRequest
0 голосов
/ 17 июня 2020

Я новичок в программировании и просто занимаюсь этим как хобби, и я прорабатываю некоторые проблемы CodeAbbey на практике.

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

Пример набора данных:

5 (это количество наборов данных)

(ниже приведены фактические данные)

7899743 906

6574065 -1243290

5441 1320

9965047 86

4781 1934

Мой код выглядит следующим образом:

namespace Rounding
{
    class Program
    {
        static void Main(string[] args)
        {
            // declare variables
            // n asks user for number of array columns
            // raw takes the numbers seperated by new lines
            int n = int.Parse(Console.ReadLine());
            string[] raw = Console.ReadLine().Split('\n');
            int[,] numbers = new int [n,2];

            // loop through raw array and split the numbers and add them to multidimentional array
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    numbers [i, j] = Convert.ToInt32(raw[n].Split(' '));
                }

            }

            // display data from multidimentional array (for testing)
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    Console.WriteLine(numbers[i,j]);
                }
            }
        }
    }
}

Программа должна подождать, пока пользователь введет количество наборов данных, затем снова дождаться фактических данных и затем использовать эти данные для заполнения массива.

Сообщение отладки, которое я получаю, находится на numbers [i, j] = Convert.ToInt32(raw[n].Split(' ')); В нем говорится:

System.IndexOutOfRangeException: «Индекс находился за пределами массива».

Мы будем благодарны за любые указания относительно того, что я делаю неправильно.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Попробуйте следующее:

// declare variables
    // n asks user for number of array columns
    // raw takes the numbers seperated by new lines
    int n = int.Parse(Console.ReadLine());
    string[] raw = Console.ReadLine().Split(' ');
    double[,] numbers = new double[n, 2];


     if (raw.Count() != n * 2)
     {
        Console.WriteLine("Invalid values");
        return;
     }


    int index = 0;

    // loop through raw array and split the numbers and add them to multidimentional array
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            numbers[i, j] = Convert.ToInt32(raw[index++]);
        }

    }

    // display data from multidimentional array (for testing)
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            Console.WriteLine(numbers[i, j]);
        }
    }

Это дает результат 7899743 906 6574065 -1243290 5441 1320 9965047 86 4781 1934

при вводе 5 и этих значений.

0 голосов
/ 17 июня 2020

Эту проблему можно решить с помощью конвейера Linq:

var str = @"7899743 906

            6574065 -1243290

            5441 1320

            9965047 86

            4781 1934";

str.Split('\n')
.Where(s => string.IsNullOrWhiteSpace(s) == false)
.Select(s => s.Split(' '))
.Select(s => new int[] { int.Parse(s[0]), int.Parse(s[1]) })
.ToList() // just so we can use the ForEach method of List<T>
.ForEach(s => Console.WriteLine($"{s[0]} * {s[1]} = {s[0] * s[1]}"));

Это даст следующий результат:

7899743 * 906 = -1432767434
6574065 * -1243290 = -146509562
5441 * 1320 = 7182120
9965047 * 86 = 856994042
4781 * 1934 = 9246454
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...