ArrayList size达标时递增变量的for循环初始化、条件与逻辑咨询
解决方案
首先修正你代码里的语法错误:按钮点击事件的Lambda表达式缺少闭合的}),先补上。
方式一:直接数学计算(推荐,无需循环)
你的需求本质是:a的值等于arrayLog.size()除以59的整数商(当size是59的倍数时,刚好匹配目标值)。每次添加元素后直接计算当前应有的a值即可:
int a = 0; ArrayList<String> arrayLog = new ArrayList<>(); androidx.appcompat.widget.AppCompatButton log = findViewById(R.id.log); log.setOnClickListener(view -> { arrayLog.add("Clicked"); // 添加元素后获取当前集合大小 int currentSize = arrayLog.size(); // 计算当前a的目标值:size除以59取整 int currentA = currentSize / 59; // 仅当达到新阈值时更新a if (currentA > a) { a = currentA; // 这里可添加a更新后的业务逻辑,比如打印日志 // Log.d("TAG", "a已更新为:" + a); } });
这种方式简单高效,完全满足需求:size=59时currentA=1,size=118时currentA=2,以此类推,且只有达到阈值时a才会变化。
方式二:使用循环(按需选择)
如果一定要用循环实现,可以从当前a的下一个阈值开始检查:
int a = 0; ArrayList<String> arrayLog = new ArrayList<>(); androidx.appcompat.widget.AppCompatButton log = findViewById(R.id.log); log.setOnClickListener(view -> { arrayLog.add("Clicked"); int currentSize = arrayLog.size(); // 从a+1对应的阈值开始检查 for (int i = a + 1; ; i++) { int threshold = 59 * i; if (currentSize == threshold) { a = i; // 这里可添加a更新后的业务逻辑 break; } else if (currentSize < threshold) { // 未达到下一个阈值,退出循环 break; } // 若size跳过了当前阈值(比如批量添加元素),继续检查下一个 } });
注意:原代码里的int n = arrayLog.size();只会在初始化时执行一次,无法响应按钮点击后的size变化,必须把size的检查逻辑放在按钮点击事件内部。
内容的提问来源于stack exchange,提问作者Abisay
相关产品推荐
相关产品推荐

