对于在学校的任务,我正在通过蛮力进行一些模式挖掘(我知道有更好的方法,这就是它的分配方式)。我遇到过以下情况......
if (theSetLength == 1) {
for (int i = 0; i < 100000; ++i) {
if (itemArrays[i].getItem(theSetInt[0]) == true) ++counter;
}
}
if (theSetLength == 2) {
for (int i = 0; i < 100000; ++i) {
if (
itemArrays[i].getItem(theSetInt[0]) == true &&
itemArrays[i].getItem(theSetInt[1]) == true
) ++counter;
}
}
if (theSetLength == 3) {
for (int i = 0; i < 100000; ++i) {
if (
itemArrays[i].getItem(theSetInt[0]) == true &&
itemArrays[i].getItem(theSetInt[1]) == true &&
itemArrays[i].getItem(theSetInt[2])
) ++counter;
}
}
这将持续到20的长度。是否有更简洁的方法来写这个?具体来说,我需要所有20个if语句还是有更好的方法?
由于
答案 0 :(得分:3)
试试这个:
for (int i = 0; i < 100000; ++i) {
boolean all = true;
for (int j = 0; j < theSetLength && all; ++j) {
if (!itemArrays[i].getItem(theSetInt[j]))
all = false;
}
if (all) ++counter;
}
以上内容将测试相应数量的项目,具体取决于theSetLength
的值,该值已在上述代码段之前定义和分配。
答案 1 :(得分:0)
怎么样:
int counter = 0;
for(int theSetLength=1; theSetLength <= 20; theSetLength ++){
for (int i = 0; i < 100000; ++i) {
for(int j=0; j < theSetLength; j++){
if (itemArrays[i].getItem(theSetInt[j]) == false) break;
}
if(j == theSetLength)
++counter;
}
}