有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

循环java如何有效地对用户输入进行分类

我试图制作一个简单的程序,读取用户输入的整数,并根据数值对其进行分类,直到计数器达到70

代码:

int counter = 0;
    int value;
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int i = 0;
    Scanner scan = new Scanner(System.in);

    while (counter != 70) {
        value = scan.nextInt();
        if (value >= 45 && value <= 55) {
            a++;
            counter++;
        } else if (value >= 56 && value <= 66) {
            b++;
            counter++;
        } else if (value >= 67 && value <= 77) {
            c++;
            counter++;
        } else if (value >= 78 && value <= 88) {
            d++;
            counter++;
        } else if (value >= 89 && value <= 99) {
            e++;
            counter++;
        } else if (value >= 100 && value <= 110) {
            i++;
            counter++;
        } else {

        }
    }

    System.out.println(a + "-" + b + "-" + c + "-" + d + "-" + e + "-" + i);

显然,这段代码效率很低,而且我知道复制这段代码的方法比较省时。我现在觉得自己很笨,所以请告诉我最有效的方法


共 (2) 个答案

  1. # 1 楼答案

    提高可读性的一种方法是更改变量名称:

    a becomes from45to55
    b becomes from56to66
    

    您还可以将重复操作移动到一种方法中:

    public static void increment(int value, int counter) {
            value++;
            counter++;
        }
    

    并使用try with resources块关闭Scanner。完整代码:

    public static void main(String[] args) {
            int counter = 0;
            int value;
            int from45to55 = 0;
            int from56to66 = 0;
            int from67to77 = 0;
            int from78to88 = 0;
            int from89to99 = 0;
            int from100to110 = 0;
            try (Scanner scan = new Scanner(System.in)) {
    
                while (counter != 70) {
                    value = scan.nextInt();
                    if (value >= 45 && value <= 55) {
                        increment(from45to55, counter);
                    } else if (value >= 56 && value <= 66) {
                        increment(from56to66, counter);
                    } else if (value >= 67 && value <= 77) {
                        increment(from67to77, counter);
                    } else if (value >= 78 && value <= 88) {
                        increment(from78to88, counter);
                    } else if (value >= 89 && value <= 99) {
                        increment(from89to99, counter);
                    } else if (value >= 100 && value <= 110) {
                        increment(from100to110, counter);
                    } else {
    
                    }
                }
            }
        }
    
        public static void increment(int value, int counter) {
            value++;
            counter++;
        }
    
  2. # 2 楼答案

    我一直在思考如何使用循环来制作这个程序,所以我想到了以下几点:

    int min = 45;
        int max = 55;
        int counter = 0;
        ArrayList<Integer> list = new ArrayList<Integer>();
    
        for (int i = 0; i < 10; i++) {
            list.add(scan.nextInt());
        }
    
        while (min <= 100) {
            for (int value : list) {
                if (value >= min && value <= max) {
                    counter++;
                }
            }
            System.out.print(counter + "-");
            min += 11;
            max += 11;
            counter = 0;
    

    我真的不知道这是否能更快地分配内存,但对我来说,它看起来更整洁,尽管它可能效率不高