簡體   English   中英

Java計數器問題

[英]Java counter issue

我正在嘗試編寫一個程序,該程序從文本文件中讀取值並檢查特定值范圍內有多少個值。 關鍵是最終讓程序將每個范圍的值總數打印到控制台。 我已經有了它一次可以執行 1 個值的地方,但是它會隨着每個新的 int 值而重置。 在當前,它只會一遍又一遍地重復第一個數字。 重申一下,我試圖讓它在對文本文件中的值進行排序后報告值在數字范圍內的次數。

這是我的代碼。

package lab2;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Lab2 {

    public static void main(String[] args) throws FileNotFoundException {

        File file = new File("lab2_input.txt");
        Scanner scan = new Scanner(file);

        int counter1 = 0;
        int counter2 = 0;
        int counter3 = 0;
        int counter4 = 0;
        int counter5 = 0;
        int counter6 = 0;
        int counter7 = 0;
        int counter8 = 0;

        while(scan.hasNextLine()) {

            int number = scan.nextInt();
            System.out.println(number);

            if (number <= 24){
                counter1++;
            }
            if (25 <= number && number <= 49){
                counter2++;
            }
            if (50 <= number && number <= 74){
                counter3++;
            }
            if (75 <= number && number <= 99){
                counter4++;
            }
            if (100 <= number && number <= 124){
                counter5++;
            }
            if (125 <= number && number <= 149){
                counter6++;
            }
            if (150 <= number && number <= 174){
                counter7++;
            }
            if (175<= number && number >= 200){
                counter8++;
            }

        }

        System.out.println(counter1);
        System.out.println(counter2);
        System.out.println(counter3);
        System.out.println(counter4);
        System.out.println(counter5);
        System.out.println(counter6);
        System.out.println(counter7);
        System.out.println(counter8);
    }

}

我認為您的意思是檢查例如范圍從 25 到 49,而不是:

if (25 <= number && number <= 49){
    counter2++;
}

你應該寫:

if (25 >= number && number <= 49){
    counter2++;
}

其他檢查也一樣。

PS:我建議將counter設為數組並根據計算的索引增加元素,因為范圍始終為 25: var index = number / 25

這看起來像很多手動counter 您所需的間隔定期間隔為 25,因此我將使用數組。 此外,使用try-with-Resources以避免泄漏文件句柄。 並使用Scanner.hasNextInt()Scanner.nextInt() (不是Scanner.hasNextLine() )。 最后,我將圍繞計數及其范圍添加更多描述性消息。 喜歡,

File file = new File("lab2_input.txt");
int[] counters = new int[9];
try (Scanner scan = new Scanner(file)) {
    while (scan.hasNextInt()) {
        int v = scan.nextInt();
        if (v >= 0 && v <= 200) {
            counters[v / 25]++;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}
for (int i = 0; i < counters.length; i++) {
    System.out.printf("The range %d to %d had %d values%n", i * 25, 
            ((i + 1) * 25) - 1, counters[i]);
}

您可以使用else-if塊而不是多個if塊並擺脫下限驗證。 如果您正在處理大量數字,這也會帶來一些性能改進。

    if (number <= 24){
        counter1++;
    } else if (number <= 49){
        counter2++;
    } else if (number <= 74){
        counter3++;
    } else if (number <= 99){
        counter4++;
    } else if (number <= 124){
        counter5++;
    } else if (number <= 149){
        counter6++;
    } else if (number <= 174){
        counter7++;
    } else if (number <= 200){
        counter8++;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM