2017-06-27 10 views
0

配列内の各要素に、それ以外のすべての配列要素を掛けるループを作成する必要があります。配列内の各要素に配列以外のすべての配列要素を掛けてください

例 - >

[1 3 4]

[1 3 4]

1 3、1 4、3 1、3 4 4 1、4 3

私は次のコードを書いた:

私が書いたコードは、それ自身と他の要素とすべての数字に掛け合わせる。

これを修正する方法についてのアイデアはありますか?

ありがとう

+1

(Array.Whereのint秒(N => N =最初の)!) '' foreachの - 彼らは繰り返さない保証することができます。それ以外の場合は 'for'ループを使用してインデックスを比較します。 –

+1

['if ... else..'](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/if-else)は修正するのに役立ちます。 –

答えて

1

要素の代わりに配列のインデックスをループする必要があります。このように、あなたは、2つのインデックスが等しいかどうかをチェックすることにより、あなたは同じ要素を扱っているかどうかを確認することができます

var arr = new int[] {1, 3, 4}; 
var result = new List<string>(); 
for (int i = 0 ; i < arr.Length ; i++) { 
    for (int j = 0 ; j < arr.Length ; j++) { 
     if (i != j) { 
      result.Add($"{arr[i]} {arr[j]}"); 
     } 
    } 
} 
0

は2つの索引を持つネストされたforループを、試してみてください。

for (int ix1 = 0; ix1 < myArray.Length; ix1++) { 
    // Numbers before ix1. 
    for (int ix2 = 0; ix2 < ix1; ix2++) { 
    Console.WriteLine(myArray[ix1] + " " + myArray[ix2]); 
    } 
    // Numbers after ix1 
    for (int ix2 = ix1 + 1; ix2 < myArray.Length; ix2++) { 
    Console.WriteLine(myArray[ix1] + " " + myArray[ix2]); 
    } 
} 

私はより多く使用していますC#よりもJavaに近いので、Javaismの構文をよく確認してください。

0

あなたが使用できる別のアプローチ:

int[] lst = new int[] { 2, 3, 4 }; 

    int[] multipliedList = new int[lst.Length * (lst.Length - 1)]; 
    int idx = 0; 
    for (int i = 0; i < lst.Length; i++) 
    { 
     int currIdx = 0; 
     foreach (var item in lst) 
     { 
      if (i != currIdx) 
      { 
       multipliedList[idx] = lst[i] * item; 
       idx++; 
      } 
      currIdx++; 

     } 
    } 
関連する問題