Вопрос:
Я начинаю изучать С# и пишу программу, которая сначала попросит пользователя ввести список чисел. Когда пользователь закончит ввод ввода, я хотел бы скомпоновать каждый номер, предоставленный пользователем во входном файле. Пример пользовательского ввода – 2 3 5.
Вот код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Program { class Third { public static void Main() { Console.WriteLine(«Enter how much numbers»); int howMuch = int.Parse(Console.ReadLine()); int[] num = new int[howMuch]; int sum = 0; for (int i = 0; i < num.Length; i++ ) { sum = num[i] * num[i]; // this is what i did but it does not work? } Console.WriteLine(sum); Console.ReadLine(); } } }
В частности, я бы сначала хотел, чтобы пользовательский ввод был захвачен в массиве numbers. И тогда я хотел бы скомпоновать каждое число в массиве num который был создан. Что случилось с моей программой?
Лучший ответ:
Это может быть МАЛЕНЬКОЙ лучше, хотя до сих пор все еще нужно немного потрудиться!
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Program { class Third { public static void Main() { Console.WriteLine(«Enter how many numbers»); int howMuch = int.Parse(Console.ReadLine()); int[] num = new int[howMuch]; int sum = 1; for(int i=0;i<num.Length;i++) //allows you to fill the array { Console.WriteLine(«Please enter an integer»); sum *= int.Parse(Console.ReadLine()); // this will now multiply the value to sum, as your comment suggests } Console.WriteLine(sum); Console.ReadLine(); } } }
РЕДАКТИРОВАТЬ
sum *= num[i];
должен делать то, что вы хотите!
Ответ №1
Во-первых, вам нужно получить данные от пользователя и заполнить массив:
for (int i = 0; i < num.Length; i++) { //TODO: Look into int.TryParse method to validate user input num[i] = int.Parse(Console.ReadLine()); }
Вместо того, чтобы переписывать sum используйте sum += num[i] * num[i] во втором цикле. Или, если вы ищете умножение всех чисел, просто используйте sum = sum * num[i]; и начать сумму с 1.
Ответ №2
Ваш код не инициализирует массив – я добавил
Console.WriteLine(«Enter number » + (i + 1)); num[i] = int.Parse(Console.ReadLine());
для этого.
Также исправлено суммирование: sum +=…
for (int i = 0; i < num.Length; i++ ) { Console.WriteLine(«Enter number » + (i + 1)); num[i] = int.Parse(Console.ReadLine()); sum += (num[i] * num[i]); } Ответ №3
Взгляните на математику, которую вы делаете в цикле.
sum = num[i] * num[i];
Каждый раз с помощью вы устанавливаете сумму, равную квадрату проиндексированного целого числа.
Взяв ваш пример из 2, 3, 5, первый раз через цикл, вы установите значение sum = 2 * 2 (или 4), во второй раз вы установите сумму = 3 * 3 (или 9), а в последний раз это будет сумма = 5 * 5 (или 25). То, что вы действительно хотите, это 2 * 3 * 5, правильно?
Все, что вам нужно сделать, это инициализировать int sum = 1 и изменить оператор в вашем цикле:
sum = sum * num[i];
Это приведет к получению sum = 1 * 2 в первый раз через, sum = 2 * 3 во второй раз и sum = 4 * 5 в третий раз.
Ответ №4
Я предположил, что сумма, которую вы хотите сделать (если вход 2,3,5), составляет 2 * 3 * 5. Если это так, то присвоение вашей переменной sum немного вводит в заблуждение, так как это будет означать 2 + 3 + 5.
Цикл for котором вы умножаете числа, имел строку
sum = num[i]*num[i];
Который, следуя примеру, когда я == 0, будет делать sum = 2*2, а затем перезаписывать его, когда вы увеличиваете цикл, поэтому sum заканчивается на 25 (5 * 5) и скидка на все остальные значения.
Если вы хотите суммировать квадраты чисел, инициализируя sum до 0, а затем используя строку
sum += num[i] * num[i];
должно сработать. Сказав, что, если вы специально не нужно хранить его для какой – либо причины, обрабатывая значения, когда они читали бы лучше, так как программа будет иметь 1 меньше for цикла.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Program { class Third { public static void Main() { Console.WriteLine(«Enter how much numbers»); int howMuch = int.Parse(Console.ReadLine()); int[] num = new int[howMuch]; for(int i = 0; i < howMuch; ++i) { //This is assuming that the user will enter an int value. //Ideally, verify this using int.TryParse or something similar. num[i] = int.Parse(Console.ReadLine()); } int sum = 1; //Set to 1 so that the PRODUCT is not always zero for (int i = 0; i < num.Length; i++ ) { sum *= num[i]; //Multiply the value } Console.WriteLine(sum); Console.ReadLine(); } }
Если ввод равен 2, 3, 5, значение в сумме будет 30
Ответ №5
замените код в Main() следующим образом:
Console.WriteLine(«Enter how much numbers»); int howMuch = int.Parse(Console.ReadLine()); int[] num = new int[howMuch]; Console.WriteLine(«Enter numbers»); int sum = 0; for (int i = 0; i < num.Length; i++ ) { num[i] = int.Parse(Console.ReadLine()); sum += num[i] * num[i]; // this is what i did but it does not work? } Console.WriteLine(sum); Console.ReadLine();