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));
}
解决方案
只有当循环中的当前值大于当前存储在最大的值时,最大的变量才会改变。
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;
}
推荐阅读
- macos - 多台机器上的网站开发
- typescript - Vuetify 1.1.11 类型在 VSCode 中不起作用
- java - 使用 iText 解析 PDF 文档后反转希伯来语或数字
- sql - Hibernate - 只想查询表,但它也尝试创建表
- facebook-graph-api - Instagram Graph API 中的图像缩略图
- php - 带有 PhpMyAdmin 的 Nginx(通过 ssl 保护)
- javascript - 创建一个循环来计算平均分数
- php - My Sql 查询从选定的月份和年份获取所有以前的记录
- python - 从下一个 tkinter 文件打开新窗口
- django - 更改 M2M 关系的错误消息