C# 多个For循环
编辑:我已经更新了我的问题,我知道我可以将循环次数从4增加到12,但我将循环次数从3增加到3是因为这个原因;在迭代第一个循环之后,我必须单击carousel以转到下一个迭代,因为您可以看到我的更新代码。-很抱歉,我在复制/粘贴时错过了代码 我想遍历这些行,总共有3行,每行有4列,例如:C# 多个For循环,c#,for-loop,C#,For Loop,编辑:我已经更新了我的问题,我知道我可以将循环次数从4增加到12,但我将循环次数从3增加到3是因为这个原因;在迭代第一个循环之后,我必须单击carousel以转到下一个迭代,因为您可以看到我的更新代码。-很抱歉,我在复制/粘贴时错过了代码 我想遍历这些行,总共有3行,每行有4列,例如: row 1 has 4 columns row 2 has 4 columns row 3 has 4 columns 我已经创建了3个独立的for循环,我的代码可以工作,但我相信我的代码还有改进的空间,它可以
row 1 has 4 columns
row 2 has 4 columns
row 3 has 4 columns
我已经创建了3个独立的for循环,我的代码可以工作,但我相信我的代码还有改进的空间,它可以在一个循环中而不是在三个循环中吗
代码如下:
//first row
for (int j = 0; j < 4; j++)
{
string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
...........
WaitForElement(By.XPath(_text)).Click();
}
_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 2);
WaitForElement(By.XPath(_carouselDot)).Click();
//second row
for (int j = 4; j < 8; j++)
{
string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
...........
WaitForElement(By.XPath(_text)).Click();
}
_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 3);
WaitForElement(By.XPath(_carouselDot)).Click();
//third row
for (int j = 8; j < 12; j++)
{
string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
...........
WaitForElement(By.XPath(_text)).Click();
}
//第一行
对于(int j=0;j<4;j++)
{
string _image=string.Format(“id('gen{0}')/a[{1}]/img”,j,“1”);
string _text=string.Format(“id('gen{0}')/a[{1}]”,j,“2”);
...........
WaitForElement(By.XPath(_text))。单击();
}
_carouselDot=String.Format(“id('HomePage1_Carousel1')/div/ul/li[{0}]/a”,2);
WaitForElement(By.XPath(_carouselDot)).Click();
//第二排
对于(int j=4;j<8;j++)
{
string _image=string.Format(“id('gen{0}')/a[{1}]/img”,j,“1”);
string _text=string.Format(“id('gen{0}')/a[{1}]”,j,“2”);
...........
WaitForElement(By.XPath(_text))。单击();
}
_carouselDot=String.Format(“id('HomePage1_Carousel1')/div/ul/li[{0}]/a”,3);
WaitForElement(By.XPath(_carouselDot)).Click();
//第三排
对于(int j=8;j<12;j++)
{
string _image=string.Format(“id('gen{0}')/a[{1}]/img”,j,“1”);
string _text=string.Format(“id('gen{0}')/a[{1}]”,j,“2”);
...........
WaitForElement(By.XPath(_text))。单击();
}
是的,您可以有一个从0到12的循环
for (int j = 0; j < 12; j++)
{
string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
...........
WaitForElement(By.XPath(_text)).Click();
}
for(int j=0;j<12;j++)
{
string _image=string.Format(“id('gen{0}')/a[{1}]/img”,j,“1”);
string _text=string.Format(“id('gen{0}')/a[{1}]”,j,“2”);
...........
WaitForElement(By.XPath(_text))。单击();
}
这有什么问题-
for (int j = 0; j < 12; j++)
{
string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
...........
WaitForElement(By.XPath(_text)).Click();
if(i % 4 == 3 && i != 11)
{
_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a",
(i/4 + 2));
WaitForElement(By.XPath(_carouselDot)).Click();
}
}
for(int j=0;j<12;j++)
{
string _image=string.Format(“id('gen{0}')/a[{1}]/img”,j,“1”);
string _text=string.Format(“id('gen{0}')/a[{1}]”,j,“2”);
...........
WaitForElement(By.XPath(_text))。单击();
如果(i%4==3&&i!=11)
{
_carouselDot=String.Format(“id('HomePage1_Carousel1')/div/ul/li[{0}]/a”,
(i/4+2));
WaitForElement(By.XPath(_carouselDot)).Click();
}
}
除了j的边界外,我看不出这三个区块之间有什么区别;那么为什么你不能只做一个循环呢
for (int j = 0; j < 12; j++)
...
for(int j=0;j<12;j++)
...
就像这样
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
code here
}
}
for(int i=0;i<3;i++)
{
对于(int j=0;j<4;j++)
{
代码在这里
}
}
编辑:
因为你编辑了你的问题,现在看起来更好了:
for (int i = 0; i < 12; i++)
{
string _image = String.Format("id('gen{0}')/a[{1}]/img", j, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", j, "2");
...........
WaitForElement(By.XPath(_text)).Click();
if (i % 4 == 0)
{
_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 2);
WaitForElement(By.XPath(_carouselDot)).Click();
}
}
for(int i=0;i<12;i++)
{
string _image=string.Format(“id('gen{0}')/a[{1}]/img”,j,“1”);
string _text=string.Format(“id('gen{0}')/a[{1}]”,j,“2”);
...........
WaitForElement(By.XPath(_text))。单击();
如果(i%4==0)
{
_carouselDot=String.Format(“id('HomePage1_Carousel1')/div/ul/li[{0}]/a”,2);
WaitForElement(By.XPath(_carouselDot)).Click();
}
}
您可以使用两个嵌套的for
块整洁高效地完成此操作:
int rows = 3;
int cols = 4;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
int n = (cols * i) + j;
string _image = String.Format("id('gen{0}')/a[{1}]/img", n, "1");
string _text = String.Format("id('gen{0}')/a[{1}]", n, "2");
...........
WaitForElement(By.XPath(_text)).Click();
}
if (i < rows - 1)
{
_carouselDot = String.Format("id('HomePage1_Carousel1')/div/ul/li[{0}]/a", 2);
WaitForElement(By.XPath(_carouselDot)).Click();
}
}
int行=3;
int cols=4;
对于(int i=0;i
这样很明显,您正在处理三个独立的行,您可以根据需要在每行的末尾或开头使用更简单的if
子句进行特殊处理
为新问题编辑,显示您可以在内部for
块之后执行if()
此外,避免代码中出现幻数也是一种很好的做法。这样可以避免错误,例如,如果需要更改行数或列数,只需更改一个变量。如果能够使用任务并行库
,则可以并行运行这些变量。是的,有一种方法可以使用1个循环,大多数人会建议使用2个循环,一个嵌套在另一个循环中,但是如果你知道你只有3行,那么你的代码就好了我已经更新了我的问题,请查看我的投票被暂停,等待看到一些涉及4*i+j
的注释是不是只有当i==4时才应该执行条件?我想是的,但它没有发生,它第一次和第二次运行它
j%4==0`=true0%4=0。另外,%是你能找到的最慢的运算符之一,尽管这在这段代码中可能没有多大关系。我在if中使用了'j'而不是'I',我修复了它。if(j%4)
的作用是什么?对不起,我读错了。我以为这是在每一行的末尾才做的…不,它第一次和第二次迭代if条件为真,我认为根据您的问题更新的i%4==0&&i/4-i%4==3
将对值3,7,11
有效,并且您希望在3
和7
之后执行它两次,因此请检查i!=11
%
是一个模运算符,它获取除法运算的余数。因此,它为<代码的循环返回三次true