Цикл выводит не те значения, которые нужно
У нас есть метод, который получает из параметров массив NumberText, примерно с таким содержимым: {"один", "четыре", "десять"...}. Условие в цикле сравнивает строки массива NumberText со строками массива N: если эти строки равны, то в массив NumberNumeral запишется значения массива NN. У массивов NN и N все числа и строки идут в одинаковой последовательности, поэтому в массив NumberNumeral должно записаться число, которое равно числу в строке массива NumberText. Однако, когда я ввожу "Один + пять", то мне выводит: "1 + 0". Но если я введу "Один+два+три+четыре+пять", то мне выведет: "1 + 2 + 3 + 4 + 5". Почему числа не выводятся как мне надо?
Я первый раз задаю вопрос на таких сайтах по программированию, поэтому надеюсь, что понятно описал мою проблему, а потому буду ждать вашей помощи
static void TransformNum(string[] NumberText)
{
string[] N = new string[]
{ "один", "два", "три", "четыре", "пять", "шесть", "семь",
"восемь", "девять", "десять", "одиннадцать", "двенадцать",
"тринадцать", "четырнадцать", "пятнадцать", "шестнадцать",
"семнадцать", "восемнадцать", "девятнадцать", "двадцать", };
int[] NN = new int[]
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
int[] NumberNumeral = new int[NumberText.Length];
for (int i = 0; i < NumberText.Length; i++)
{
for (int b = 0; b < NumberText.Length; b++)
{
if (NumberText[i] == N[b])
{
NumberNumeral[i] = NN[b];
}
}
}
for(int i = 0; i < NumberNumeral.Length; i++)
{
Console.WriteLine(NumberNumeral[i]);
}
}
Ответы (1 шт):
for (int i = 0; i < NumberText.Length; i++)
{
for (int b = 0; b < NumberText.Length; b++)
{
if (NumberText[i] == N[b])
{
NumberNumeral[i] = NN[b];
}
}
}
Внутренний цикл у вас сравнивает столько строк из N, сколько есть в вашем вводе, а не столько, сколько реально их лежит в N. Т.е. после "один" и "два" цикл заканчивается, найдя только "один". А ноль во второй позиции - от инициализации массива. Так что нужно исправить внутренний цикл, чтобы он прошёл по всем элементам массива N:
for (int i = 0; i < NumberText.Length; i++)
{
for (int b = 0; b < N.Length; b++) # <- ИСПРАВЛЕНО ЗДЕСЬ
{
if (NumberText[i] == N[b])
{
NumberNumeral[i] = NN[b];
}
}
}