2016-12-09 4 views
-4

В моей программе ниже я знаю, что произошло, но не знаю, какой цикл я должен использовать. Вот код. Ваша помощь будет оценена по достоинству.Какую петлю я должен использовать, чтобы получить правильный результат ниже. Программа C#

Дайте мне знать, если вам нужна дополнительная информация, чтобы понять мой вопрос.

using System; 

// Write a C# program that takes x numbers as input to calculate and print the average. 
class Program9 
{ 
    int input, i = 1, val, sum; 

    decimal avg; 

    public void program9M() 
    { 
     Console.Write("How many number(s) you have for an average: "); 
     input = Convert.ToInt32(Console.ReadLine()); 

     if (input >= 2) 
     { 
      do 
      { 
       Console.Write("Enter number {0} for an average: ", i); 
       val = Convert.ToInt32(Console.ReadLine()); 
       sum = sum + val; 
       i += 1; 
      } while (i <= input); 

      avg = (decimal)sum/i; 
      Console.WriteLine("The average of above {0} number is: {1}", i, avg); 
     } 
     else 
     { 
      Console.WriteLine("\n\nSorry you can't find average for one number, at least 2 number required\n\n"); 
     } 

     Console.Write("Press any key to continue further..."); 
     Console.ReadKey(); 
    } 

    public static void Main() 
    { 
     Program9 p9 = new Program9(); 
     p9.program9M(); 
    } 
} 

Вход:

How many number(s) you have for an average: 3 

Enter number 1 for an average: 5 

Enter number 2 for an average: 10 

Enter number 3 for an average: 15 

Токовый выход:

The average of above **4** number is: **7.5** 

Ожидаемый результат:

The average of above **3** number is: **10** 
+1

'i = 0' вместо' 1'? – Hackerman

+3

Бадди, мы не живые отладчики, начнем использовать вашу функцию отладки и проверьте, в чем проблема. Если у вас есть точная проблема, спросите. – mybirthname

+0

Эй, парень, ты прав !!!, большое спасибо. – user3460246

ответ

0

Вопрос заключается в том, как do работает.

Измените int input, i = 0, val, sum; и переместите ваш i increment в начало страницы. Кроме того, поскольку мы начинаем с 0, сделайте сравнение i меньше входного.

class Program9 

{ 

    int input, i = 0, val, sum; 

    decimal avg; 

    public void program9M() 

    { 

     Console.Write("How many number(s) you have for an average: "); 
     input = Convert.ToInt32(Console.ReadLine()); 
     if (input >= 2) 
     { 
      do 
      { 
       i += 1; 
       Console.Write("Enter number {0} for an average: ", i); 
       val = Convert.ToInt32(Console.ReadLine()); 
       sum = sum + val; 

      } while (i < input); 
      avg = (decimal)sum/i; 
      Console.WriteLine("The average of above {0} number is: {1}", i, avg); 
     } 

     else 
     { 
      Console.WriteLine("\n\nSorry you can't find average for one number, at least 2 number required\n\n"); 

     } 
     Console.Write("Press any key to continue further..."); 
     Console.ReadKey(); 
    } 

    public static void Main() 

    { 
     Program9 p9 = new Program9(); 
     p9.program9M(); 
    } 

} 

}

0

Лучший цикл, чтобы использовать там «для» петли, но при этом он также может работать. Ошибка, которую вы делали так, так это то, что «i» должно начинаться с 0 и в то время как там должно быть «(i < input)». Так код с этим циклом выглядит:

int i = 0; 
do 
{ 
    Console.Write("Enter number {0} for an average: ", i); 
    val = Convert.ToInt32(Console.ReadLine()); 
    sum = sum + val; 
    i += 1; 
} while (i < input); 

avg = (decimal)sum/input; 
Console.WriteLine("The average of above {0} number is: {1}", input, avg); 

И «за» цикл, который является более распространенным использованием в таких случаях, как это:

for (int i = 0; i < input; i++) 
{ 
    Console.Write("Enter number {0} for an average: ", i); 
    val = Convert.ToInt32(Console.ReadLine()); 
    sum = sum + val; 
} 

avg = (decimal)sum/input; 
Console.WriteLine("The average of above {0} number is: {1}", input, avg); 

И нет никакого смысла делить на «я», так как «input» - это всегда количество чисел.

1

Вы можете полностью очистить этот код.

int index = 0, input, averageInput; 
var collection = new List<int>(); 
if(int.TryParse(Console.ReadLine(), out input) && input >= 2) 
{ 
    while(index <= input) 
    { 
      if(int.TryParse(Console.ReadLine(), out averageInput) 
      collection.Add(averageInput); 

      index++; 
    } 

    var sum = collection.Sum(); 
    var average = collection.Average(); 
} 

Вам понадобится обработка ошибок. Но вместо того, чтобы делать расчет самостоятельно, вы можете использовать Linq. Это сделает его более выразительным. Кроме того, если вы делаете это самостоятельно, вам не нужно: sum = sum + average вы можете просто сделать: sum += average и он будет постоянно добавлять.

Вы также можете использовать ++ или -- для автоматического увеличения и уменьшения. Итак, вам не нужно i += 1 вы можете просто сделать i++.

Вы также должны начать цикл в ноль, так как коллекция начнется с нулевой базы, а не одной. Поэтому, если у вас массив, у вас пять, и вы начинаете с одного, вы получите только четыре значения. Поскольку массив инициализируется с нулем.