我有一个程序可以抓取一个包含布尔值的文件,并且我计算了错误值的数量,直到达到真值。然后,当它遇到另一个错误值时,它会再次计算它们。我有一个较低的阈值和一个较高的假值数阈值,我需要在这个范围内只增加一次计数器。顺便说一句,这不是家庭作业。
private static int readBooleanValues(File textFile, int higher, int lower) throws FileNotFoundException {
Scanner scanner = new Scanner (textFile);
int counter = 0;
int secondaryCounter = 0;
while ( scanner.hasNext() ) {
String value = scanner.next();
if ( value.equalsIgnoreCase("false") ) {
counter++;
if ( counter >= lower && counter <= higher ) {
secondaryCounter++;
}
} else if ( value.equalsIgnoreCase("true") ) {
counter = 0;
}
}
return secondaryCounter;
}
答案 0 :(得分:1)
如果我正确理解你的问题,你想做@WonderWorld建议,并替换
if ( counter >= lower && counter <= higher ) {
secondaryCounter++;
}
通过
if (counter == lower)
secondaryCounter++;
if (counter == higher+1)
secondaryCounter--;
当它首次进入范围时,此值仅增加secondaryCounter
一次。如果以后证明false
值的字符串过长(counter
到达higher+1
时),则会更正secondaryCounter
的值。
答案 1 :(得分:1)
改变这个:
if ( counter >= lower && counter <= higher ) {
secondaryCounter++;
}
到
if ( counter >= lower) {
secondaryCounter++;counter=0;
}
现在您的范围无法触及,counter
将在Scanner
读取真值时保持为零,您可以重新开始。虽然如果有太多false
值使计数无效,您将需要采取进一步行动。
答案 2 :(得分:0)
或者您可以将secondaryCounter置于真实部分:
if ( value.equalsIgnoreCase("false") ) {
counter++;
}
} else if ( value.equalsIgnoreCase("true") ) {
if ( counter >= lower && counter <= higher ) {
secondaryCounter++;
}
counter = 0;