java - 初始化变量不会改变?

标签 java

了解其工作原理。变量 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));
    }

最佳答案

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

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

关于java - 初始化变量不会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998982/

相关文章:

java - 我如何在 C++ 的堆栈上正确添加 QTWidgets?

java - 字段在方法内不起作用

java - Swing JTable - 根据前一行的功能更改行的背景颜色

java - 为什么 isEmpty() 在 BufferedReader 中跳过很多行?

java - 在 Java 中嵌入 XQuery

java - 指定 Java 通信库的位置

java - mockito 中的 anyString() 抛出参数匹配器的无效使用

java - 将所有输入转换为大写

java - SQL 数据库连接未与 DMZ 中的 java Web 应用程序服务器建立

java - 使用实体列表的 JPA Criteria API 持久字段 IN 表达式