Проблема приложения Windows в сумме массива - PullRequest
1 голос
/ 20 апреля 2011

Учитывая массив, инициализированный числами, как я могу добавить все его элементы без использования LINQ или foreach?

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

namespace WindowsApplication5
{
   public partial class Form1 : Form
   {
      public Form1()
      {
         InitializeComponent();
      }

      public void Form1_Load(object sender, EventArgs e)
      {
         method1(sum1);
         MessageBox.Show("The Sum Is = " + sum1.ToString(), "Addition",MessageBoxButtons.OK,MessageB…
      }
      int sum1;
      int[] str = new int[4] { 1, 2, 3, 4 }; // i want to add this 4 values and to be printed on a messagebox//

      public int method1(int str)
      {
          sum1 = str;
          return sum1;
      }
   }
}

Вывод показывает "сумма равна = 0" вместо 10.

Спасибо.

P.S .: Я не хочу использовать LINQ или foreach.

Ответы [ 4 ]

3 голосов
/ 20 апреля 2011

Для начала у вас есть глобальные переменные, которые являются плохими.Не используя LINQ или Foreach, как вы упомянули, попробуйте что-то вроде:

//Doesn't have to be a button click...just an example.
private void button1_Click(object sender, EventArgs e)
{
   int[] values = new int[4] { 1, 2, 3, 4 };
   int result = Sum(values);
   MessageBox.Show(result.ToString());
}

int Sum(int[] values)
{
   int sum= 0;
   for (int i = 0; i < values.Length; ++i)
   {
       sum += values[i];
   }
   return sum;
}
2 голосов
/ 20 апреля 2011

Простейшие варианты, в которых не используются foreach или LINQ, - использовать цикл for или рекурсию. Рекурсивное решение:

int Sum(int[] arr, int index = 0, int current = 0)
{
  if(index == arr.Length)
    return current;
  return Sum(arr, index+1, current+arr[index]);
}

Использование цикла for:

int Sum(int[] arr)
{
  int result = 0;
  for(int i = 0; i<arr.Length; i++)
    result+=arr[i];
  return result;
}
1 голос
/ 20 апреля 2011

Мне интересно, почему вы против for петли. Не могли бы вы просветить нас?

Если я что-то упустил, похоже, у вас есть два варианта:
1) использовать существующий метод (в данном случае это будет .Sum() метод, в LINQ) или
2) написать метод для вычисления суммы (это будет цикл foreach)

1 голос
/ 20 апреля 2011

Чтобы взять сумму массива, вы можете просто сказать: int sum = myArray.Sum();

Для этого необходимо иметь: using System.Linq, поскольку именно здесь определен метод расширения суммы.

Если у вас нет linq, то как насчет:

private int CalculateSum(int[] arr){
   int total = 0;
   foreach(int i in arr)
      total += i;
   return total;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...