获得结果为数组

时间:2017-12-05 18:07:28

标签: c# arrays methods

我们正在学习如何使用Stream Reader,并且我遇到了一些方法问题,实际上当我试图获得返回值时它不起作用。

static void FindeMinMaxVerkauf(Verkauf[] arr, out Verkauf min, out Verkauf max)
{

    double min2 = 10000;
    double max2 = 0;
    int min3 = 0;
    int max3 = 0;

    for (int i = 0; i < arr.Length; i++)
    {
        if((arr[i].StückPreis * arr[i].Stückzahl) < min2)
        {
            min2 = arr[i].StückPreis * arr[i].Stückzahl;
            min3 = i;
        }
        if ((arr[i].StückPreis * arr[i].Stückzahl) > max2)
        {
            max2 = arr[i].StückPreis * arr[i].Stückzahl;
            max3 = i;
        }
    }
    min = arr[min3];
    max = arr[max3];
}

这就是我试图获得返回值的方式

double min,max;
FindeMinMaxVerkauf(alle, out min, out max);
Console.WriteLine("Verkäufe mit kleinsten Preis " + min + "Verkäufe mit größten Preis" + max );

但它说

  

CS1503参数“3”:Konvertierung von“out double”in“out”   _61_T_Shirts.Verkauf“nichtmöglich。

这意味着从double中的Tshirts转换... 不可能。我不知道如何解决它。

  1. 这是我的第二个方法:

    static Verkauf FindeHöchsteStückzahl(Verkauf[] arr)
    {
        int anz = 0;
        int pos = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            if(arr[i].Stückzahl > anz)
            {
                anz = arr[i].Stückzahl;
                pos = i;
            }
        }
        return arr[pos];
    }
    
  2. 这就是我试图获得回报价值的方式:

    FindeHöchsteStückzahl(alle);
    Console.WriteLine("Höchste Stückzahl: " + alle );
    

    但是我得到的数字是结果:

    Höchste Stückzahl: _61_T_Shirts.Verkauf[]
    
    1. 我的意思是:

      static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe)
      {
          int j = 0;
          Verkauf[] finderverk = new Verkauf[10000];
          for (int i = 0; i < arr.Length; i++)
          {
              if(arr[i].Farbe == farbe)
              {
                  finderverk[j] = arr[i];
                  j++;
              }
          }
          Array.Resize(ref finderverk, j);
          return finderverk;
      }
      

      } }

    2. 我需要帮助; D

2 个答案:

答案 0 :(得分:1)

第一个问题。为什么不只是效仿并宣布min以及maxVerkauf

Verkauf min, max; // Verkauf, not double
FindeMinMaxVerkauf(alle, out min, out max);

// String interpolation - $"... {value} ..." is more readable
// We have min and max of type Verkauf; we want to print out StückPreis: 
Console.WriteLine(
  $"Verkäufe mit kleinsten Preis {min.StückPreis} Verkäufe mit größten Preis {max.StückPreis}");

第二个问题。您必须保存 FindeHöchsteStückzahl调用的结果,然后显示它,而不是初始数组:

// Save the result of the method call (sorry for the umlaut)
var hoch = FindeHöchsteStückzahl(alle);

// ... and print out the result (hoch), not the initial array 
// If you haven't implement `ToString()` in the Verkauf class
// You, probably, don't want {hoch} but {hoch.StückPreis}:
// Console.WriteLine($"Höchste Stückzahl: {hoch.StückPreis}");  
Console.WriteLine($"Höchste Stückzahl: {hoch}"); 

修改:如果您想要返回数组,即Verkauf[](第一和第二个问题合并):

// Array: 1st item is min, 2nd one is max
static Verkauf[] MinMaxVerkauf(Verkauf[] value) {
  Verkauf min, max; 
  FindeMinMaxVerkauf(alle, out min, out max);

  return new Verkauf[] {min, max};
} 

...

var minmax = MinMaxVerkauf(alle);

Console.WriteLine(
  $"Verkäufe mit kleinsten Preis {minmax[0].StückPreis} Verkäufe mit größten Preis {minmax[1].StückPreis}");

修改2 如果您想查询您的数据(找出某些StückPreis的最大Farbe),请尝试使用 Linq 专门为此目的而设计:

using System.Linq;

...

// See how it's easy (the third problem in the question):
static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe) {
  return arr
    .Where(stuck => stuck.Farbe == farbe)
    .ToArray();  
}

...

string farbe = "Rot";

double max = alle
  .Where(stuck => stuck.Farbe == farbe)
  .Max(stuck => stuck.StückPreis); 

double min = alle
  .Where(stuck => stuck.Farbe == farbe)
  .Min(stuck => stuck.StückPreis); 

Console.WriteLine(
  $"Farbe {farbe}: Verkäufe mit kleinsten Preis {min.StückPreis} Verkäufe mit größten Preis {max.StückPreis}");

答案 1 :(得分:0)

尝试使用Linq。

它内置,并且确实使代码更具可读性:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var ar = new Buy[]{
            new Buy(){Price = 1, Name = "shirt"}, 
            new Buy(){Price = 2, Name = "hat"}, 
            new Buy(){Price = 3, Name = "dog"}
        };

        Console.WriteLine(ar.OrderByDescending(b => b.Price).First().Name);
        Console.WriteLine(ar.OrderBy(b => b.Price).First().Name);
    }

    internal class Buy{
        public int Price;
        public string Name;
    }
}

打印:

dog
shirt

这应该引导你朝着正确的方向前进。