Я пишу программу для своей домашней работы в классе, и я застрял. Программа спрашивает, сколько цифр вы напишете, а затем, когда вы закончите, подсчет нечетных и даже из массива (я имею в виду int[] i
<- where я [1] я [2] и т.д.). Но он также должен иметь функцию "остановить" - когда вы пишете стоп, он должен остановиться и закончить свою работу, но проблема в том, что я делаю таблицу из 120 номеров, когда я останавливаю ее на восьмом номере, это подсчитывает числа от 9-120 как "0", и это говорит о четном числе. Как я могу его исправить?
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
int sum1 = 0,
sum2 = 0;
start:
Console.WriteLine("How many numbers?");
string lenght = Console.ReadLine();
int Arraylenght = 0;
bool test = int.TryParse(lenght, out Arraylenght);
if (test == false)
{
Console.WriteLine("\n>> Error!\n");
goto start;
}
int[] Numbers = new int[Arraylenght];
for (int i = 0; i < Arraylenght; i++)
{
start2:
Console.WriteLine("Enter number #{0}:", i + 1);
String UserInput = Console.ReadLine();
bool test2 = int.TryParse(UserInput, out Numbers[i]);
if (test2 == false && UserInput != "stop")
{
Console.WriteLine("\n>> Error!\n");
goto start2;
}
if (UserInput == "stop")
{
Console.WriteLine("\n>> Stopped!\n");
Arraylenght = i;
}
}
foreach (int number in Numbers)
{
if (number % 2 == 0) sum1 = sum1 + 1;
if (number % 2 != 0) sum2 = sum2 + 1;
}
Console.WriteLine(sum1 + " even numbers" + " \n" + sum2 + " odd numbers" );
Console.ReadKey();
}
}
}
foreach не останавливает вашу новую ArrayLength, ıt останавливает свой конец массива. Поэтому вы не должны использовать foreach, для которого вы должны использовать. Это значит; Вы должны использовать это:
for(int x =0; x<=Arraylenght;x++)
{
if (Numbers[x] % 2 == 0) sum1 = sum1 + 1;
if (Numbers[x] % 2 != 0) sum2 = sum2 + 1;
}
Console.WriteLine(sum1 + " even numbers" + " \n" + sum2 + " odd numbers" );
вместо
foreach (int number in Numbers)
{
if (number % 2 == 0) sum1 = sum1 + 1;
if (number % 2 != 0) sum2 = sum2 + 1;
}
Console.WriteLine(sum1 + " even numbers" + " \n" + sum2 + " odd numbers" );
При инициализации массива каждый элемент имеет значение 0, поэтому вы получаете 0 % 2 == 0
который оценивается как true. Теперь у вас есть два варианта: либо вы читаете только цифры, пока не дойдете до указанной точки остановки, либо используете List<int>
который в основном представляет собой сильно типизированный динамический массив.
РЕДАКТИРОВАТЬ:
Вы также можете сделать его массивом нулевых ints, что позволяет любому значению массива представлять нулевое значение. Поскольку null % 2
оценивается как null
, единственное другое редактирование, которое вы должны сделать, - это тест на нечетное число в конце.