Не могу напечатать мой результат за пределами цикла в C # - PullRequest
0 голосов
/ 18 марта 2019

Я очень плохо знаком с C #, и это упражнение давало мне немного проблем. Основная идея заключается в том, что я получаю данные о количестве Pheonix, и мне нужно прочитать длину тела, ширину и длину крыла для каждого из них, чтобы вычислить количество лет, в которых они живут. Я создал цикл for для чтения всех параметров, но я просто не знаю, как опубликовать результат в конце, не выводя его после каждого цикла. Например, у меня есть ввод:

2 phoenixes:
P1:
Body length: 100
Body width: 50
Length of 1 wing: 30
Total years: 100 ^ 2 * (50 + 2 * 30) = 1100000
P2:
Body length: 150
Body width: 25
Length of 1 wing: 10
Total years: 150 ^ 2 * (25 + 2 * 10) = 1012500

- И я должен получить вывод:

2 100 50 30 150 25 10 1100000 1012500.

Вместо этого я получаю вывод:

2 100 50 30 1100000 1012500 150 25 10 1100000 1012500.

Как мне избежать этого?

int pheonixamount = int.Parse(Console.ReadLine());

for (int i = 0; i < pheonixamount; i++)
{
    List<double> pheonix = new List<double>(3);
    double bodylength = double.Parse(Console.ReadLine());
    double bodywidth = double.Parse(Console.ReadLine());
    double lengthof1wing = double.Parse(Console.ReadLine());
    pheonix.Add(bodylength);
    pheonix.Add(bodywidth);
    pheonix.Add(lengthof1wing);
    double result = Math.Pow(bodylength, 2) * (bodywidth + 2 * lengthof1wing);
    Console.WriteLine(result);
}

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Самое время объявить Phoenix класс:

public class Phoenix {
  public Phoenix(double bodyLength, 
                 double bodyWidth, 
                 double lengthWidth) {
    if (bodyLength < 0) 
      throw new ArgumentOutOfRangeException(nameof(bodyLength)); 
    else if (bodyWidth < 0) 
      throw new ArgumentOutOfRangeException(nameof(bodyWidth)); 
    else if (lengthWidth < 0) 
      throw new ArgumentOutOfRangeException(nameof(lengthWidth)); 

    BodyLength = bodyLength;
    BodyWidth = bodyWidth;
    LengthWidth = lengthWidth;
  } 

  public double BodyLength {get;}
  public double BodyWidth {get;}
  public double LengthWidth {get;}

  public double TotalYears {
    get {
      return BodyLength * BodyLength * (BodyWidth + 2 * LengthWidth);
    }
  }

  public override string ToString() {
    return $"{BodyLength} {BodyWidth} {LengthWidth}"; 
  }
}

Теперь давайте прочитаем все фениксы в коллекцию (List<Phoenix>):

 int pheonixamount = int.Parse(Console.ReadLine());

 List<Phoenix> phoenixes = new List<Phoenix>();

 for (int i = 0; i < pheonixamount; i++) {
   Phoenix bird = new Phoenix(
     double.Parse(Console.ReadLine()),
     double.Parse(Console.ReadLine()), 
     double.Parse(Console.ReadLine())
   );

   phoenixes.Add(bird);
 }   

Наконец, давайте создадим report на основе phoenixes коллекции :

 string report = string.Join(" ",
   // 2 - number of phoenixes
   phoenixes.Count().ToString(),                                
   // phoenixes' exteriers (lengths and widths)
   string.Join(" ", phoenixes),                                 
   // phoenixes' total years - a pinch of Linq - Select
   string.Join(" ", phoenixes.Select(item => item.TotalYears)) 
 );

 Console.Write(report); 
0 голосов
/ 18 марта 2019

Вместо записи результата в один и тот же цикл используйте другой цикл для печати всех значений на консоли.В соответствии с желаемым выводом, вам нужно использовать Console.Write(), а не Console.WriteLine()

Ваш код создает новый список после каждой итерации цикла for, выведите его из цикла for

int pheonixamount = int.Parse(Console.ReadLine());
List<double> pheonix = new List<double>(pheonixamount); //Use pheonixamount instead of constant value
List<double> resultList = new List<double>(pheonixamount); 
for (int i = 0; i < pheonixamount; i++)
{
    double bodylength = double.Parse(Console.ReadLine());
    double bodywidth = double.Parse(Console.ReadLine());
    double lengthof1wing = double.Parse(Console.ReadLine());

    //Best way to store three values is to create new class, instead of storing in three different variables
    pheonix.Add(bodylength);
    pheonix.Add(bodywidth);
    pheonix.Add(lengthof1wing);
    double result = Math.Pow(bodylength, 2) * (bodywidth + 2 * lengthof1wing);
    resultList(result);
}

    //Print your pheonix values
   for (int i = 0; i < pheonixamount; i +=3)
   {
        //i, i+1, i+2 will give you bodyLength, bodyWidth, lengthof1wing respectively
        Console.Write(pheonix[i] +" "+ pheonix[i+1] +" "+ pheonix[i+2]);
   }

    //Print your result
   foreach (var item in resultList)
   {
        Console.Write(item);
   }
}
...