Как вывести переменную из цикла for в массив? C#
Проблема заключается в том, чтобы вывести номера 3-х месяцев, где прибыль меньше чем 0. Этот код выводит только последний месяц, где прибыль меньше чем 0 трижды.
static void Main(string[] args)
{
int[] expenses = new int[12];
int[] receipts = new int[12];
Random r = new Random();
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine($"{"Месяц", 10} {"Доход, тыс. руб", 20} {"Расход, тыс. руб", 20} {"Прибыль", 10}");
int profit;
int[] badProfit = new int[3];
for (int k = 0; k<12; k++)
{
expenses[k] = r.Next(0, 100_000);
receipts[k] = r.Next(0, 100_000);
profit = receipts[k] - expenses[k];
Console.ForegroundColor = ConsoleColor.Gray;
if(profit>0)
{
Console.ForegroundColor = ConsoleColor.Green;
}
if(profit<0)
{
for (int m = 0; m <=2;m++)
{
badProfit[m] = k+1;
}
Console.ForegroundColor = ConsoleColor.Red;
}
Console.WriteLine($"{k+1, 10} {receipts[k], 20} {expenses[k], 20} {profit, 10} ");
}
Console.WriteLine($"Месяцы с худшей прибылью: {badProfit[0]} , {badProfit[1]}, {badProfit[2]}");
Console.ReadKey();
}
}
Вот таким образом я пытаюсь записать данные в массив.
if(profit<0)
{
for (int m = 0; m <=2;m++)
{
badProfit[m] = k+1;
}
А здесь я хочу их вывести вне цикла, что не так?
Console.WriteLine($"Месяцы с худшей прибылью: {badProfit[0]} , {badProfit[1]}, {badProfit[2]}");
Ответы (1 шт):
Проблема в том, что в твоей программе каждый из месяцев три раза записывается в массив badProfit, поэтому самый последний месяц просто перезаписывает предыдущий.
Я бы лучше использовал список для такой задачи, но если важно использовать именно массив, то можно сделать так.
Объявить массив badProfit размером 12 и объявить переменную countBad, означающую количество месяцев с отрицательной прибылью.
int[] badProfit = new int[12];
int countBad = 0;
В теле главного цикла в теле блока кода, где выполнилось условие отрицательной прибыли добавлять заполнять массив номерами месяцев, когда прибыль отрицательна по индексу - количеству месяцев с отрицательной прибылью, при этом увеличивая каждый раз количество:
if (profit < 0)
{
badProfit[countBad] = k + 1;
countBad++;
Console.ForegroundColor = ConsoleColor.Red;
}
А потом просто вывести вот в таком формате:
Console.WriteLine($"Месяцы с худшей прибылью: {badProfit[countBad - 3]} , {badProfit[countBad - 2]}, {badProfit[countBad - 1]}");
Если важно не объявлять дополнительную переменную, или массив всегда должен быть размера 3, то можно написать функцию смещения массива, ну или просто использовать списки.
Это вместо объявления массива:
List<int> badProfit = new List<int>();
if (profit < 0)
{
badProfit.Add(k + 1);
Console.ForegroundColor = ConsoleColor.Red;
}
Console.WriteLine($"Месяцы с худшей прибылью: {badProfit[badProfit.Count - 3]} , {badProfit[badProfit.Count - 2]}, {badProfit[badProfit.Count - 1]}");