You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java技术问询:文本文件数字存入ArrayList<Double>及运算符判断问题

嘿,我来帮你搞定这两个Java问题~

问题1:将文本文件中的数字存入ArrayList

首先咱们得先处理文件里的字符串内容,再把每个数字转成Double类型存进集合,步骤如下:

  1. 读取numbers2.txt的全部内容
  2. 去掉内容首尾的括号(),再按逗号,分割成单个数字的字符串数组
  3. 遍历数组,用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.0
  • Double.parseDouble("3.14") 返回3.14
  • Double.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:40:50