Java技术问询:文本文件数字存入ArrayList<Double>及运算符判断问题
嘿,我来帮你搞定这两个Java问题~
问题1:将文本文件中的数字存入ArrayList
首先咱们得先处理文件里的字符串内容,再把每个数字转成Double类型存进集合,步骤如下:
- 读取
numbers2.txt的全部内容 - 去掉内容首尾的括号
(),再按逗号,分割成单个数字的字符串数组 - 遍历数组,用
Double.parseDouble()把每个字符串转成Double,加入ArrayList
代码示例
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; public class NumberLoader { public static void main(String[] args) { ArrayList<Double> numList = new ArrayList<>(); try { // 读取文件内容,Java 11+支持Files.readString,更简洁 String fileContent = Files.readString(Paths.get("numbers2.txt")); // 清理字符串:去掉括号,分割成单个数字字符串 String[] numStrings = fileContent.replaceAll("[()]", "").split(","); // 逐个转成Double并存入集合 for (String s : numStrings) { // trim()是为了防止数字前后有空格(比如文件里写的是" 1 , 2 "这种情况) double num = Double.parseDouble(s.trim()); numList.add(num); } // 验证结果 System.out.println("存入ArrayList的数字:" + numList); } catch (IOException e) { System.out.println("读取文件出错啦,检查文件路径是否正确"); e.printStackTrace(); } catch (NumberFormatException e) { System.out.println("有字符串没法转成数字,检查文件内容格式"); e.printStackTrace(); } } }
关于Double.parseDouble(String s)的用法
这个方法就是专门把合法的数字格式字符串转成double基本类型的,比如:
Double.parseDouble("1")返回1.0Double.parseDouble("3.14")返回3.14Double.parseDouble("-5")返回-5.0
如果传入的字符串不是合法数字(比如"abc"),它会抛出NumberFormatException,所以咱们代码里加了异常捕获,避免程序直接崩溃。
问题2:判断随机选择的运算符并计算
首先咱们可以把所有运算符存在一个ArrayList里,用Random随机选一个,然后用if-else或者switch判断运算符类型,再执行对应的计算逻辑。
代码示例(结合随机数+运算符判断)
import java.util.ArrayList; import java.util.Random; public class RandomCalculator { public static void main(String[] args) { // 存储所有要用到的运算符 ArrayList<String> operators = new ArrayList<>(); operators.add("+"); operators.add("-"); operators.add("*"); operators.add("/"); Random random = new Random(); // 随机选一个运算符 String chosenOp = operators.get(random.nextInt(operators.size())); // 生成两个随机数(这里用0-100的整数,你也可以换成从之前的ArrayList里取) double num1 = random.nextInt(101); double num2 = random.nextInt(101); double result = 0; boolean isValid = true; // 判断运算符并计算 if (chosenOp.equals("+")) { result = num1 + num2; } else if (chosenOp.equals("-")) { result = num1 - num2; } else if (chosenOp.equals("*")) { result = num1 * num2; } else if (chosenOp.equals("/")) { // 除法要注意除数不能为0 if (num2 != 0) { result = num1 / num2; } else { System.out.println("除数不能为0,这次计算无效"); isValid = false; } } // 输出结果 if (isValid) { System.out.printf("%.0f %s %.0f = %.2f%n", num1, chosenOp, num2, result); } } }
注意点
- 判断字符串类型的运算符时,一定要用
equals()方法,不能用==!因为==比较的是对象的内存地址,而equals()才是比较字符串的内容。 - 除法必须加个判断,防止除数为0的情况,不然会抛出
ArithmeticException。
如果你用的是Java 12及以上版本,还可以用更简洁的switch表达式:
result = switch (chosenOp) { case "+" -> num1 + num2; case "-" -> num1 - num2; case "*" -> num1 * num2; case "/" -> num2 != 0 ? num1 / num2 : Double.NaN; default -> Double.NaN; };
内容的提问来源于stack exchange,提问作者Addvardare665
相关产品推荐
相关产品推荐

