2013-11-21 20 views
5

Bir dizideki tüm sayıların ürününü bulmam gereken bir görevim var, bunu nasıl yapacağımı bilmiyorum.Bir dizideki tüm değerler nasıl çoğaltılabilir?

int[] numbers = new int[SIZE]; 

    Console.WriteLine("Type in 10 numbers"); 
    Console.WriteLine("To stop, type in 0"); 
    for (int input = 0; input < SIZE; input++) 
    { 
     userInput = Console.ReadLine(); 
     numberInputed = int.Parse(userInput); 

     if (numberInputed == ZERO) 
     { 
      numberInputed = ONE; 
      break; 
     } 
     else 
     { 
      numbers[input] = numberInputed; 
     } 

    } 

Dizideki tüm sayıların ürününü bulmaya çalıştığım yer burası.

foreach (int value in numbers) 
    { 
     prod *= value; 
    } 

    Console.WriteLine("The product of the values you entered is {0}", prod); 

Neden foreach deyiminde yanlış yapıyorum? Şimdiden teşekkürler

Düzen, benim beyan değerleri

const int SIZE = 10; 
    const int ZERO = 0; 
    string userInput; 
    int numberInputed; 
    int prod = 1; 

tüm on değerleri yazarken Artık çalışır dışında bırakılan ancak ben döngüyü kırmak için bir 0 koyarsanız o zaman her şey 0. nasıl eşittir Diziye 0 yazılmasını engeller miyim?

int prod = 1; 
foreach (int value in numbers) 
{ 
    prod *= value; 
} 

Yapabilirsin:

+0

yanlış Neler oluyor senin kodun? –

cevap

19

olursanız olun dizide ne numaralar, prod doğru sonuç almak için 1 olarak başlatmak emin olun 0'a kalacak demektir ki, sen prod için 0 başlatmak mümkündür Yukarı

using System.Linq; // put with other using directives 

int prod = numbers.Aggregate(1, (a, b) => a * b); 

: Ayrıca aynı şeyi yapmak için LINQ en Aggregate uzatma yöntemi kullanmak date

Asıl sorun (daha önce fark edemediğim), döngüsünden erken ayrılırsanız dizinin tam olarak doldurulmamasıdır. Demek hala Bunu düzeltmek için 0 durumuna getirilir set vermedi herhangi dizi girişleri, kullandığınız bir List<int> yerine int[] bir ait:

using System.Collections.Generic; // put with other using directives 

List<int> numbers = new List<int>(SIZE); // Capacity == SIZE 

... 

for (int input = 0; input < SIZE; input++) 
{ 
    ... 
    if (numberInputed == ZERO) 
    { 
     break; 
    } 
    else 
    { 
     numbers.Add(numberInputed); 
    } 
} 
+2

+1. Her zaman bir şeyler yapmanın birden fazla yolunu sağlamayı başarabilirsin. Kudos :) –

+0

+1 'fold' için…' Agrega 'demek istiyorum. –

+0

Üzgünüm, gönderimi bildirilen değerler ile güncelledim. Ben prod eşit 1 var. Yönteminizi denedim ama bir "Hata 'System.Array' tanımı 'Aggregate' için bir tanım içermiyor ve 'Sistem' türünde bir ilk bağımsız değişken kabul eden 'Agrega' bir uzantı yöntemi yok. Array 'System.Linq kullanılarak – user2781666

1

sorun kaç tane ürün takip kalmamasıdır aslında bir değer atanmış dizide. Döngü girişi kullanarak döngüden çıkarsanız, öğelerin geri kalanı değişmez. Varsayılan olarak sıfır oldukları için, ikinci döngüde bu sıfırları kullanacaksınız ve dizideki bir sıfıra sahip olduğunuzda, toplam ürün sıfırlanır. kaç öğe olduğunu

takip edin döngünün dışında döngü değişkeni tutarak vardır: Şimdi

int input = 0; 
while (input < SIZE) 
{ 
    userInput = Console.ReadLine(); 
    numberInputed = int.Parse(userInput); 
    if (numberInputed == ZERO) { 
     break; 
    } 
    numbers[input] = numberInputed; 
    input++; 
} 

aslında atanır yalnızca öğeleri kullanabilirsiniz:

for (int i = 0; i < input; i++) { 
    prod *= numbers[i]; 
} 
İlgili konular