在范围内递增一次计数器

时间:2015-03-08 00:14:28

标签: java range increment

我有一个程序可以抓取一个包含布尔值的文件,并且我计算了错误值的数量,直到达到真值。然后,当它遇到另一个错误值时,它会再次计算它们。我有一个较低的阈值和一个较高的假值数阈值,我需要在这个范围内只增加一次计数器。顺便说一句,这不是家庭作业。

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;
}

3 个答案:

答案 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;