2017-05-12 14 views
0
int iterationMax = 1; 
double actualMax = 0; 
int A = 3; 

List<double> tmp = new List<double> { 400, 0, -300, 400, 600 ,300, 400, 
             1200, 900, 400, 1200, 1500}; 
List<double> listMax = new List<double>(); 
for (int i = 0; i < tmp.Count; i++) 
{ 
    if (iterationMax < A) // A == 3 
    { 
     if (tmp[i] > actualMax) 
     { 
      actualMax = tmp[i]; 
     } 
     iterationMax++; 
    } 
    else 
    { 
     listMax.Add(actualMax); 
     actualMax = 0; 
     iterationMax = 1; 
    } 
} 

Console.WriteLine("\nMaxs: "); 
foreach (double max in listMax) 
{ 
    Console.Write(max + ", "); 
} 

リストtmpは= { 400,0,-300|400,600,300|400,1200,900|400,1200,1500}を保持し、 プロデュース400, 600, 1200, 1200、 は400, 600, 1200, 1500であるべき。私はリストに1500を追加するためにelse文を入力する方法を知らない。ループをもう一度繰り返しますか?

3つの要素ごとにmaxを取得したいだけです。

+1

タイプミスはありませんか? (listMax.Add(aktualnyMax)) 'listMax.Add(actualMax)'にする必要があります – enkryptor

+0

私は変数の名前を変更しなければならなかったので、別の言語で書いていました – quimak

+0

リスト tmp = newリスト 、-300,400,600,300,400,1200,900,400,1200,1500}; (x = 1、x = 0、x = 0、x = 0、x = 0、x = 0) > x.Select(y => y.value).Max())。ToList(); – jdweng

答えて

1

クイックフィックスは、次のようになります。他の人のよう

var A = 3; 

int iterationMax = 0; 
double actualMax = 0; 

List<double> tmp = new List<double> {400,0,-300,400,600,300,400,1200,900,400,1200,1500}; 
List<double> listMax = new List<double>(); 
for (int i = 0; i < tmp.Count; i++) 
{ 
    if (iterationMax < A) // A == 3 
    { 
     if (tmp[i] > actualMax) 
     { 
      actualMax = tmp[i]; 
     } 
     iterationMax++; 
    } 

    if (iterationMax == A) 
    { 
     listMax.Add(actualMax); 
     actualMax = 0; 
     iterationMax = 0; 
    } 
} 

Console.WriteLine("\nMaxs: "); 
foreach (double max in listMax) 
{ 
    Console.Write(max + ", "); 
} 

0からiterationMaxを開始し、if (iterationMax == A)にそのelseを回す、と述べています。

+0

ありがとう、それは私が探していたものです。 – quimak

+0

2番目のifはelseと同等です –

+1

いいえ、2つのif文を使用する場合は、両方の繰り返しでチェックインされます。 ifとelseを使用すると、elseがifがfalseのときにのみ実行されます。それで、最後の反復で私のelseはスキップされたのです。 – quimak

4

コレクションの操作を行う必要があるときは、Linqを使用するのが何回もうまくいきます。

index/3GroupByを使用してください。intであるため、以下の項目はそれぞれkeyとなります。次に、各グループについて、最大値を選択します。

var items = new int[] { 400, 0, -300, 400, 600, 300, 400, 1200, 900 }; 

var results = items.Select((item, index) => new { item, index }) 
        .GroupBy(item => item.index/3) 
        .Select(group => group.Max(item => item.item)); 
//400, 600, 1200 
0

初期化でiterationMaxを0に設定すると、問題が解決するはずです。

現在、if構造体は3つの要素のうち最初の2つのみをチェックします。 1500は要素#3なので、チェックされません。あなたのコードのための

0

iterationMaxが3に達すると、tempの値で何もしないと、そのループは失われます。

for (int i = 0; i < tmp.Count; i++) 
{ 
    if (tmp[i] > actualMax) 
    { 
     actualMax = tmp[i]; 
    } 
    iterationMax++; 

    if (iterationMax > A) 
    { 
     listMax.Add(actualMax); 
     actualMax = 0; 
     iterationMax = 1; 
    } 
} 
+0

ええ、私はこれを解決する方法を知っていませんでしたが、スタックは常に役立ちます。私は凍結した – quimak

関連する問題