如何将多条件嵌套if判断转换为for循环?(C#)
数组匹配判断转for循环的错误修正
原代码的逻辑是:当localModulebytes从i+1到i+9的9个元素,和convertedByteArray从1到9的9个元素全部相等时,才给similarities加1。
你写的循环有两个明显错误:
- 逻辑错误:它会在每个位置匹配时都给
similarities加1,最多能加9次,这自然会让数值远高于原代码的结果; - 范围错误:循环条件
j < 9只检查到j=8,漏掉了原代码里j=9的判断,导致匹配范围不完整。
正确的for循环写法应该是先验证所有位置是否都匹配,只有全部匹配时才执行一次加1操作,同时覆盖完整的9个位置:
bool allMatch = true; for (int j = 1; j <= 9; j++) { if (localModulebytes[i + j] != convertedByteArray[j]) { allMatch = false; break; // 只要有一个不匹配,直接跳出循环,不用再检查剩下的 } } if (allMatch) { // Code similarities++; }
原代码参考
if (localModulebytes[i + 1] == convertedByteArray[1] && localModulebytes[i + 2] == convertedByteArray[2] && localModulebytes[i + 3] == convertedByteArray[3] && localModulebytes[i + 4] == convertedByteArray[4] && localModulebytes[i + 5] == convertedByteArray[5] && localModulebytes[i + 6] == convertedByteArray[6] && localModulebytes[i + 7] == convertedByteArray[7] && localModulebytes[i + 8] == convertedByteArray[8] && localModulebytes[i + 9] == convertedByteArray[9] ) { // Code similarities++; }
你尝试的错误代码
for (var j = 1; j < 9; j++) { if (localModulebytes[i + j] == convertedByteArray[j]) { similarities++; } }
内容的提问来源于stack exchange,提问作者LennartGran
相关产品推荐
相关产品推荐

