Java作业求助:实现筛选ArrayList中符合立方条件的Double元素
实现Java作业中的q3方法
嘿,刚学Java的话不用慌,咱们一步步拆解这个问题就好~首先得把题目里的判断条件转换成Java能执行的逻辑,然后再写具体的方法代码。
先理清判断规则
对于输入集合里的每个元素 x,只要满足以下两个条件中的任意一个,就把它保留到结果集合里:
- 条件1:
x的立方与32805.23的差值的绝对值 ≤ 9602.0 → 对应代码:Math.abs(Math.pow(x, 3) - 32805.23) <= 9602.0 - 条件2:
x的立方与32001.00的差值的绝对值 < 9500.0 → 对应代码:Math.abs(Math.pow(x, 3) - 32001.00) < 9500.0
完整代码实现
import java.util.ArrayList; public class YourClassName { // 把这里替换成你自己的类名 public static ArrayList<Double> q3(ArrayList<Double> inputList) { // 创建空集合存储符合条件的元素 ArrayList<Double> resultList = new ArrayList<>(); // 遍历输入集合的每一个元素 for (Double num : inputList) { // 计算当前元素的立方值(两种写法任选其一都可以) double cube = num * num * num; // 写法1:直接连乘,精度更稳定 // double cube = Math.pow(num, 3); // 写法2:用Math工具类的pow方法 // 拆分两个条件,让代码更易读 boolean meetsCondition1 = Math.abs(cube - 32805.23) <= 9602.0; boolean meetsCondition2 = Math.abs(cube - 32001.00) < 9500.0; // 满足任意一个条件就加入结果集合 if (meetsCondition1 || meetsCondition2) { resultList.add(num); } } // 返回最终筛选后的集合 return resultList; } }
新手友好的关键点解释
- 立方计算:用
num * num * num比Math.pow(num,3)的精度更稳定,适合Double类型的数值计算;如果是整数的话两种写法没差别。 - 绝对值
Math.abs():因为差值可能是正数也可能是负数(比如x³比目标值小的时候),取绝对值才能正确判断差值的范围。 - 逻辑或
||:只要两个条件中有一个成立,就符合要求,所以用||连接两个条件。 - 增强for循环:
for (Double num : inputList)这种写法比普通for循环更简洁,新手不容易搞混索引,也更易读。
测试小示例(可选)
如果你想验证代码是否正确,可以在类里加个main方法测试:
public static void main(String[] args) { ArrayList<Double> testList = new ArrayList<>(); testList.add(30.0); // 30³=27000,和32001的差值是5001,绝对值<9500,满足条件 testList.add(32.0); // 32³=32768,和32805.23的差值是37.23,绝对值≤9602,满足条件 testList.add(40.0); // 40³=64000,两个条件都不满足 ArrayList<Double> result = q3(testList); System.out.println(result); // 输出:[30.0, 32.0] }
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

