java在通过流打印时的意外行为

czfnxgou  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(300)

我使用java进行一些cp,今天我看到了一个无法解释的行为。
我有一些解算器类将列表返回到我的主方法。主要方法看起来像这样:

  1. public static void main(String[] args) throws IOException {
  2. FastScanner in = new FastScanner(new BufferedReader(new FileReader("resources/Cp/.../sample.txt")));
  3. // FastScanner in = new FastScanner(new BufferedReader(new FileReader("resources/Cp/.../debug.txt")));
  4. // FastScanner in = new FastScanner(new BufferedReader(new InputStreamReader(System.in)));
  5. var writer = new PrintWriter(System.out);
  6. long numberOfTestcases = Integer.valueOf(in.readLine());
  7. for (int j = 1; j <= numberOfTestcases; j++) {
  8. final var sol = solve(in, j);
  9. String s = sol.toString();
  10. writer.println("Case #" + j + ": " + (sol
  11. .stream()
  12. .map(Vector2d::getX)
  13. .mapToInt(Double::intValue)
  14. .distinct()
  15. .sorted()
  16. .mapToObj(Objects::toString)
  17. .collect(Collectors.joining(" "))
  18. ));
  19. in.readLine();
  20. }
  21. writer.close();
  22. }

我注意到(懒惰的)编写器对于解决的问题给出了错误的结果,如果并且仅当我事先没有读取变量时。在写入程序之前添加此字符串s行将更改写入程序从中打印的结果

  1. Case #4: 10
  2. Case #5: 5
  3. Case #6: 3 4

  1. Case #4: 10
  2. Case #5: 9
  3. Case #6: 3 4

所以我的问题是:我本以为读操作不会以任何方式改变状态。
关于缓存一致性是否有可能触发不同的行为?可能与流api有关?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题