首页 文章

Java值减少的减法

提问于
浏览
0

我遇到了一个棘手的问题 . 我正在寻找一个如何处理这个问题的建议 . 我的数据集中有三个字段 . 我想进行减法 . 问题就是这样 .

Time(s)    a      x
  1         0.1    0.2
  2                0.4
  3                0.6
  4                0.7
  5         0.2    0.9

我需要从(a-x)执行减法 . 但减法的方法就像在时间1s a 的值为0.1 . 操作将是(0.1-0.2)第一次迭代 . 2nd iteration (0.1-0.4) . 3rd iteration (0.1-0.6) . 4th iteration (0.1-0.7) 但在第二次迭代中它将是 (0.2-0.9) .

这是我的问题陈述 . 我想在 Java 中写下这段代码 . I don't need Java code . 我可以自己写下来 . 我需要一个建议如何继续这种方法?一个想法是 creating array for each variable . 但后来坚持循环 . 循环如何迭代?很明显,数组a是静态的,直到获得下一个值,该值可在时间5s获得 .

3 回答

  • 1

    这取决于输入文件的大小:

    • 如果数据集适合内存,则将其作为2个单独的数组或 Row 对象的一个数组加载,其中 ax 作为字段 . 之后,它是简单的迭代,记住 a 缺失时包含 a 的最后一行使用它 .

    • 如果数据集很大,最好使用BufferedReader读取它,并且只记住上次遇到的 ax . 这将大大减少内存消耗,并将是首选方法 .

  • 0

    如果 a 每4个数字更改一次,您可以使用 time's / 4 + 1a 的小数组中获取值 .

    如果 a 不是每4个数字都改变,那么我建议使用填充相同值的完整数组 .

  • 0

    现在,我发现你没有使用数据库,只是从文件中读取,也许试试这个

    只需保留 a 的旧值,直到新值可以覆盖它 . 这是内存高效的,因为它逐行解析 .

    public static List<Double> parseFile(String myFile) throws IOException {
    
        List<Double> results = new ArrayList<>();
        try (BufferedReader b = new BufferedReader(new FileReader(myFile));) {
            b.readLine(); // ** skip header?
    
            String line;
            Integer time = null;
            Double a = null;
            Double x = null;
            for (int lineNum = 0; (line = b.readLine()) != null; lineNum++) {
    
                // ** split the data on any-and-all-whitespace
                final String[] data = line.split("\\s+");
                if (data.length != 3)
                    throw new RuntimeException("Invalid data format on line " + lineNum);
    
                try {
                    time = Integer.valueOf(data[0]);
                    if (!data[1].trim().isEmpty()) {
                        a = Double.valueOf(data[1]);
                    }
                    if (!data[2].trim().isEmpty()) {
                        x = Double.valueOf(data[2]);
                    }
                } catch (Exception e) {
                    throw new RuntimeException("Couldn't parse line " + lineNum, e);
                }
    
                if (a == null || x == null) {
                    throw new RuntimeException("Values not initialized at line " + lineNum);
                }
    
                results.add(Double.valueOf(a.doubleValue() - x.doubleValue()));
            }
        }
        // ** finished parsing file, return results
        return results;
    }
    

相关问题