Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#循环乘法int以降低_C#_For Loop_Multiplication - Fatal编程技术网

C#循环乘法int以降低

C#循环乘法int以降低,c#,for-loop,multiplication,C#,For Loop,Multiplication,我有以下阵列: int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } }; int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } }; 我想知道的是: 使用myArray1和myArray2之和创建一个新数组 使用myArray1和myArray2的减法创建一个新数组 用myArray1和myArray2的乘积创建一个新数组 计算结果如下: int[,] myAr

我有以下阵列:

int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };
我想知道的是:

  • 使用myArray1和myArray2之和创建一个新数组
  • 使用myArray1和myArray2的减法创建一个新数组
  • 用myArray1和myArray2的乘积创建一个新数组
计算结果如下:

int[,] myArray3 = new int[2, 3] { { 7, 6, 0 }, { -4, 4, 0 } };
int[,] myArray3 = new int[2, 3] { { 5, 2, 6 }, { 12, 8, 16 } };
int[,] myArray3 = new int[2, 3] { { 6, 8, 9 }, { 32, 12, 64 } };
减法的结果是:

int[,] myArray3 = new int[2, 3] { { 7, 6, 0 }, { -4, 4, 0 } };
int[,] myArray3 = new int[2, 3] { { 5, 2, 6 }, { 12, 8, 16 } };
int[,] myArray3 = new int[2, 3] { { 6, 8, 9 }, { 32, 12, 64 } };
乘法的结果是:

int[,] myArray3 = new int[2, 3] { { 7, 6, 0 }, { -4, 4, 0 } };
int[,] myArray3 = new int[2, 3] { { 5, 2, 6 }, { 12, 8, 16 } };
int[,] myArray3 = new int[2, 3] { { 6, 8, 9 }, { 32, 12, 64 } };

这是否可以像打印阵列一样,使用for循环?我试图寻找示例,但没有找到可以用于解决特定问题的示例。

我通常尝试使用LINQ,但我能找到的都是循环

int[,] myArray3 = Compute(myArray1, myArray2, (x,y) => x+y);
int[,] myArray4 = Compute(myArray1, myArray2, (x,y) => x-y);
int[,] myArray5 = Compute(myArray1, myArray2, (x,y) => x*y);


int[,] Compute(int[,] a, int[,] b, Func<int,int,int> operation)
{
    int cols = a.GetLength(0);
    int rows = a.GetLength(1);
    int[,] result = new int[cols,rows];

    for(int col=0; col<cols ; col++)
    {
        for(int row=0; row<rows ; row++)
        {
            result[col,row] = operation(a[col,row], b[col,row]);
        }
    }

    return result;
}
int[,]myArray3=Compute(myArray1,myArray2,(x,y)=>x+y);
int[,]myArray4=Compute(myArray1,myArray2,(x,y)=>x-y);
int[,]myArray5=Compute(myArray1,myArray2,(x,y)=>x*y);
int[,]计算(int[,]a,int[,]b,Func运算)
{
int cols=a.GetLength(0);
int rows=a.GetLength(1);
int[,]结果=新的int[列,行];

对于(int col=0;col索引
[i,j]
处的结果是同一索引处两个源数组中元素的和、乘或减。因此,您可以通过简单地循环这些索引并将每个单元格的结果值分配给结果数组来实现

int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };

int[,] result = new int[2, 3];
for (int i = 0; i < 2; i++)
{
    for (int j = 0; j < 3; j++)
    {
        result[i, j] = myArray1[i, j] + myArray2[i, j];
        //                            ^
        //            change that for a different operation
    }
}
int[,]myArray1=新的int[2,3]{{1,2,3},{4,6,8};
int[,]myArray2=新的int[2,3]{{6,4,3},{8,2,8};
int[,]结果=新的int[2,3];
对于(int i=0;i<2;i++)
{
对于(int j=0;j<3;j++)
{
结果[i,j]=myArray1[i,j]+myArray2[i,j];
//                            ^
//将其更改为其他操作
}
}
如果需要所有结果,也可以一次计算所有结果,避免多次迭代数组:

int[,] resultAdd = new int[2, 3];
int[,] resultMultiply = new int[2, 3];
int[,] resultSubtract = new int[2, 3];

for (int i = 0; i < 2; i++)
{
    for (int j = 0; j < 3; j++)
    {
        resultAdd[i, j] = myArray1[i, j] + myArray2[i, j];
        resultMultiply[i, j] = myArray1[i, j] * myArray2[i, j];
        resultSubtract[i, j] = myArray1[i, j] - myArray2[i, j];
    }
}
int[,]resultAdd=newint[2,3];
int[,]resultMultiply=新int[2,3];
int[,]resultSubtract=新的int[2,3];
对于(int i=0;i<2;i++)
{
对于(int j=0;j<3;j++)
{
结果d[i,j]=myArray1[i,j]+myArray2[i,j];
结果倍数[i,j]=myArray1[i,j]*myArray2[i,j];
结果tract[i,j]=myArray1[i,j]-myArray2[i,j];
}
}

简短回答:是的,可以使用for循环完成。继续尝试,当遇到问题时让我们知道您的具体问题。用逻辑术语定义“求和”、“乘法”和“减法”(即“求和就是这个加上那个,最后在这里结束”)我不明白结果是如何发生的我相信你的例子中有一些值是错误的。3和3的和不是0,而是6。3和3的减法不是6而是0。还有一些其他的。为什么总和的后半部分和“减法”是交换的?@Alex Element
[I,j]
结果中是元素
myArray1[i,j]
myArray2[i,j]
的和/乘/减。Benoit,请您在回答中解释一下,为什么Func运算需要3个整数值,以及行
运算是什么(a[col,row],b[col,row])
真的吗?这看起来很整洁,但我不明白completly@Serv
Func
是一个委托,它接受两个
int
值并返回
int
值。和
操作(a[col,row],b[col,row]);
仅对数组中的值应用此操作。向此方法传递参数时,您只需定义应对两个输入值应用的操作。让我尝试重新表述一下,看看我是否理解:
(x+y)=>x+y
表示
(输入(1),输入(2))=>(指定操作的结果(3))
对吗?如果尝试使用linq,请给出+1;如果接受for循环,请给出+1;对于函数注入,请给出+1。遗憾的是,仅限于+1。尽管回答很好。@Serv
(x,y)=>x+y
基本上定义了一个函数,该函数将两个整数
x
y
作为输入,执行计算
x+y
,并以整数形式返回结果。与Benoit的简洁解决方案相比,该函数很难看。@DavidArno它可能“难看”但它直截了当地指出了需要做些什么来执行这种计算,而不需要加入一些魔法,这些魔法只会混淆或分散人们对问题实际解决方案的注意力。看看这个问题,实际问题似乎是如何在阵列上循环…@DavidArno,“丑陋”(虽然事实上是一样的)否决票的理由…?不,没有理由。所以被删除了。