首页 > 解决方案 > 初始化变量不会改变?

问题描述

了解为什么会这样。该变量biggest使用一个计数器初始化,该计数器从数组列表的索引 0 开始,其值为3。但是当在 while 循环中比较时,它比较 3 是否 3 大于 3,如果不是计数器上升。counter上升,但初始化的“最大”变量保持不变。为什么?

 public static int greatest(ArrayList<Integer> list) {
        System.out.println(list); 
        int counter = 0;

        int biggest = list.get(counter); // biggest starts at index 0 - value 3 // this counter seems to go up but the "biggest"
                                        // value remains the same when the counter below goes up.

        while (counter< list.size() ){// goes to while loop
            if ( list.get(counter)>biggest){
                biggest=list.get(counter);
            }

            counter++;
        }

        System.out.println(biggest);
        System.out.print(counter);  
        return biggest;   
    }            

    public static void main(String[] args) {
        ArrayList<Integer> lista = new ArrayList<Integer>();
        lista.add(3);
        lista.add(2);
        lista.add(71);
        lista.add(2);

        System.out.println("The greatest number is: " + greatest(lista));
    }

标签: java

解决方案


只有当循环中的当前值大于当前存储在最大的值时,最大的变量才会改变。

list.get(counter)>biggest

这就是为什么你看不到它总是在变化的原因。

我添加了一些印刷品以更好地展示这个概念,希望您可以使用它来更好地理解。

 public static int greatest(ArrayList<Integer> list) {
        System.out.println(list); 
        int counter = 0;

        int biggest = list.get(counter); // biggest starts at index 0 - value 3 // this counter seems to go up but the "biggest"
                                        // value remains the same when the counter below goes up.

        while (counter< list.size() ){// goes to while loop
            System.out.println("Current biggest value: " + biggest);
            System.out.println("Current iteration value: " + list.get(counter));
            if ( list.get(counter)>biggest){
                System.out.println("Current value is bigger than biggest! Changing biggest value...");
                biggest=list.get(counter);
            }

            counter++;
        }

        System.out.println(biggest);
        System.out.print(counter);  
        return biggest;   
    }            

    public static void main(String[] args) {
        ArrayList<Integer> lista = new ArrayList<Integer>();
        lista.add(3);
        lista.add(2);
        lista.add(71);
        lista.add(2);

        System.out.println("The greatest number is: " + greatest(lista));
    }

作为奖励,我还想分享另一个使用更简单的 for 循环完成的版本。

请注意这里的 max 值如何设置为整数可以故意具有的最小可能值。

这样做我们可以确定它肯定会低于 ArrayList 中的任何其他值。

这是示例:

public int getMax(ArrayList<Integer> list){
    int max = Integer.MIN_VALUE;
    for(int i=0; i<list.size(); i++){
        if(list.get(i) > max){
            max = list.get(i);
        }
    }
    return max;
}

推荐阅读