2014-02-04 2 views
0

им делать калькулятор, это код:Функция умножать элементы массива

Если я перейти к функции умножения и я вхожу, например я хочу кратному 2 * 2 * 2 этот код он выводит 4 8 4 Я не понимаю, почему, хорошо, я знаю, что 2 * 2 = 4 * 2 = 8, но почему последние 4? и как я могу получить результат без получения полной серии ?, когда я пытаюсь выполнить запись в Консоли WriteLine за пределами циклов for, она выдает ошибку. это не позволяет мне.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 

     static void LetsSum(int [] myArray) 
     { 
      int sum = myArray.Sum(); 
      Console.WriteLine(sum);  
     } 

     static void letsMult(int [] myArray) 
     { 
      for (int a = 0; a < myArray.Length; a++) 
      { 
       for (int b = a+1; b < myArray.Length; b++) 
       { 
       int multip = myArray[a] *= myArray[b]; 
       Console.WriteLine(multip); 

       } 

      } 

     } 

     static void Main(string[] args) 
     { 

      //First Variable total of numbers from users input 
      int TotalNumb = 0;   
      //String to receive users input 
      string TotalN = string.Empty; 
      //Specifying size of array 
      Console.WriteLine("Please specify how many numbers do you want to do the math"); 
      TotalN = Console.ReadLine(); 
      //Converte because readline it's a string 
      TotalNumb = Convert.ToInt32(TotalN); 
      //Name of ARRAY and passing the value selected by the user 
      int[] myArray = new int[TotalNumb]; 

      //counter for the loop 
      int i = 0; 
        for (i = 0; i < TotalNumb; i++) 
        { 
         Console.WriteLine("Enter your number"); 

         myArray[i] = Convert.ToInt32(Console.ReadLine()); 
        } 

      Console.WriteLine("Please enter SUM, LESS, MULT, DIV"); 
      string ToDo = Console.ReadLine(); 


        if (ToDo == "SUM") 
        { 
         Program.LetsSum(myArray); 
        } 

        if (ToDo == "MULT") 
        { 
         Program.letsMult(myArray); 
        } 

        Console.Read(); 
     } 
    } 
} 

ответ

0

Очень простой ... изменить свой код, как внизу ...

static void letsMult(int [] myArray) 
     { 
      int output=1; 

      for (int a = 0; a < myArray.Length; a++) 
      { 
        output=output*myArray[a]; 
        Console.WriteLine(output); 
      }  
     } 
+1

Сэр, спасибо очень много. полностью исправить это сработало просто отлично – user3269676

+0

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

0

сообщение об ошибке, потому что вы объявляя int multip в сокровенной сферы для цикла. После этого int выходит за пределы области видимости и не может использоваться. Если вы хотите multip быть доступны вне цикла for, объявить его вне для цикла:

static void letsMult(int [] myArray) 
    { 
     int multip = 1; 
     for (int a = 0; a < myArray.Length; a++) 
     { 
      for (int b = a+1; b < myArray.Length; b++) 
      { 
       multip = myArray[a] *= myArray[b]; 
      } 

     } 
     Console.WriteLine(multip); 
    } 

Примечание, это объявил выше для цикла, но используется в цикле, и выводится наружу цикл, но все еще в его области (что в моем случае является «всей функцией»).

У вас все еще есть логическая проблема. Вы уверены, что вам нужен вложенный цикл? Как бы вы описали человека, как умножить список чисел, чтобы получить общий продукт?

0

У вас есть 3 элементов в массиве

[2, 2, 2]

Тогда вы умножаете 0 и 1 и выводим результат:

[4, 2, 2] ВЫХОД: 4

Затем нужно умножить 0 и 2 и выходной результат:

[8, 2, 2] ВЫХОД: 8

п умножить 1 и 2 и выводим результат:

[8, 4, 2] ВЫВОД: 8

Может быть, вы хотите, чтобы удалить внешний контур, в этом случае ваш выход будет

4, 8

+0

Вы продолжаете использовать слово «sum», когда вы имеете в виду «умножить». –

+0

@Jon: черт возьми, слишком много скопируйте и вставьте утром ... – Mikescher

0

использование

int multip=1; 

for (int a = 0; a < myArray.Length; a++) 
      { 

       multip *= myArray[a]; 
       Console.WriteLine(multip); 

       } 

      } 
+0

Как вы можете использовать «b» в качестве переменной, прежде чем объявить об этом? я думаю, что это «а» ... – vino20

0

Вы можете сделать это с помощью LINQ-х Aggregate():

для суммы:

int[] arr1 = new int[] { 2, 2, 2 }; 
    int result = arr1.Aggregate((a, b) => b + a); 
//or 
    int result = arr1.Sum(); 

для умножения:

int[] arr1 = new int[] { 2, 2, 2 }; 
    int result = arr1.Aggregate((a, b) => b * a); 
0

Я предполагаю, что вы хотите отобразить каждый multiplacation result.If так что вы можете сделать следующее:

int multip = myArray[0]; 
for (int a = 1; a < myArray.Length; a++) 
{ 
    Console.Write("{0} * {1} = ",multip, myArray[a]); 
    multip *= myArray[a]; 
    Console.WriteLine(multip); 
} 
Смежные вопросы