如何访问从另一个类中的文本文件导入的 Map?

我有三个类(Main、Product 和 Counter)。Product 创建一个名为 mProductMap 的新 TreeMap。产品还具有将 TreeMap 写入文本文件的导出方法。使用 import 方法从中读取。运行 Main.txt 时已创建文本文件。Counter 类使用 TreeMap 对键的值进行计算。

Product 和 Counter 中的所有方法过去都在同一个类中,直到我决定将某些方法分开在它们自己的类中是更好的做法。我正在尝试使用 Product 的 getter 方法访问 Counter 类中的 TreeMap,然后在其上使用 Counter 的方法。

问题:当所有东西都在同一个类中时,一切都有效。现在我将方法放在单独的类中,Counter 方法无法读取 TreeMap 中的内容。它返回 else 语句:“Key1 不存在。请重试。”

任何人都可以向我解释发生了什么以及如何解决这个问题?我不知道这是否是重要信息,但是: Product 和 Counter 类在同一个包中。主要进口那个包。

主要类:

public class Main {
    public static void main(String[] args) {
        Product product = new Product();
        Counter counter = new Counter();
        product.importFrom("prices.txt");
        counter.add("Key1");
        counter.add("Key2");
        counter.add("Key3");
        product.exportTo("prices.txt");
    }
}

产品类别:

public class Product {
    private TreeMap<String, BigDecimal> mProductMap = new TreeMap<>();

    public TreeMap<String, BigDecimal> getProductMap() {
        return mProductMap;
    }

    public void setProductMap(TreeMap<String, BigDecimal> productMap) {
        mProductMap = productMap;
    }

    public void addProduct(String product, BigDecimal price) {
        mProductMap.put(product, price);
    }

    public void exportTo(String fileName) {
        try (
                FileOutputStream fos = new FileOutputStream(fileName);
                PrintWriter writer = new PrintWriter(fos);
        ) {
            for(Map.Entry<String, BigDecimal> entry : mProductMap.entrySet()) {
                writer.printf("%s|%s%n",
                        entry.getKey(),
                        entry.getValue());
            }
        } catch(IOException ioe) {
            System.out.printf("Problem saving %s %n", fileName);
            ioe.printStackTrace();
        }
    }

    public void importFrom(String fileName) {
        try (
                FileInputStream fis = new FileInputStream(fileName);
                BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
        ) {
            String line;
            while((line = reader.readLine()) != null) {
                String[] args = line.split("\\|");
                addProduct(args[0], new BigDecimal(args[1]));
            }
        } catch(IOException ioe) {
            System.out.printf("Problems loading %s %n", fileName);
            ioe.printStackTrace();
        }
    }
}

计数器类:

public class Counter {
    private BigDecimal total = new BigDecimal("0.00");
    Product p = new Product();

    private TreeMap<String, BigDecimal> newMap = p.getProductMap();

    public void add(String product) {
        if (newMap.containsKey(product)) {
            BigDecimal price = newMap.get(product);
            total = total.add(price);
        } else {
            System.out.printf("%s does not exist. Please try again.%n", product);
        }
        System.out.printf("Adding %s. Total is %s%n", product, total);
    }
}
德鲁·威尔斯

问题在这里(内部Counter):

Product p = new Product();

private TreeMap<String, BigDecimal> newMap = p.getProductMap();

实例Product(变量p)是不是在你的加载文本文件相同的实例main方法。每个实例Product都有自己的mProductMap集合。

修复建议

您可以将 的实例传递...的构造函数,而不是Counter创建 的私有副本ProductProductCounter

public class Counter {
    private BigDecimal total = new BigDecimal("0.00");
    private final Product p;

    public Counter(Product p) {
        this.p = p;
    }

    public void add(String product) {
        TreeMap<String, BigDecimal> pMap = p.getProductMap();
        if (pMap.containsKey(product)) {
            BigDecimal price = pMap.get(product);
            total = total.add(price);
        } else {
            System.out.printf("%s does not exist. Please try again.%n", product);
        }
        System.out.printf("Adding %s. Total is %s%n", product, total);
    }
}

然后在你的main方法中,Counter像这样创建你的......

Counter counter = new Counter(product);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何遍历另一个 Map 内的 Map?

来自分类Dev

使用另一个类的 Map Fragment

来自分类Dev

在一个文本文件中搜索另一个文本文件中的值

来自分类Dev

如何遍历一个文本文件以打印到另一个文本文件?

来自分类Dev

使用一个文本文件搜索Java中的另一个文本文件

来自分类Dev

从当前文本文件中另一个文本文件的内容导入到记事本++中的特定行?

来自分类Dev

Mockito,JUnit和Map嵌套在另一个类中

来自分类Dev

在Scala中,如何检查一个Map是否包含另一个Map的所有条目?

来自分类Dev

从文本文件读入对象的向量,在类中写入另一个txt文件

来自分类Dev

在文本文件中读取多行,然后在另一个文本文件中写入

来自分类Dev

如何解析python中的文本文件并打印到另一个文本文件或json文件中?

来自分类Dev

如何从文本文件排序并写入另一个文本文件Java

来自分类Dev

如何从文本文件排序并写入另一个文本文件Java

来自分类Dev

从另一个文本文件替换文本文件中的行

来自分类Dev

在c中逐行从另一个文本文件写入文本文件

来自分类Dev

从文本文件中读取特定列的数据并写入另一个文本文件tcl

来自分类Dev

如何比较两个文本文件的内容并在另一个文本文件中输出?文字1-文字2

来自分类Dev

如何删除Windows中另一个文本文件中存在的文本文件中的所有行?

来自分类Dev

如何读取行中特定单词的文本文件并将整行写入另一个文本文件?

来自分类Dev

如何将时间从文本文件提取到另一个文本文件/列表中

来自分类Dev

如何将内容从文本文件复制到C中的另一个文本文件

来自分类Dev

如何在文本文件中提取不同的数据子集并将每个子集传递到另一个文本文件中?

来自分类Dev

使用Java格式化文本文件内容后,如何读取文本文件内容并写入另一个文本文件?

来自分类Dev

如何从另一个文件中删除基于字符串列表的多个文本文件的行?

来自分类Dev

如何从终端读取文本文件并将输出保存到Java中的另一个文件?

来自分类Dev

如何复制文本文件的内容并将其粘贴到从某行开始的另一个文件中?

来自分类Dev

如何从终端读取文本文件并将输出保存到Java中的另一个文件?

来自分类Dev

如何将文本文件复制到另一个文件?

来自分类Dev

如何将文本文件复制到另一个文件?

Related 相关文章

  1. 1

    如何遍历另一个 Map 内的 Map?

  2. 2

    使用另一个类的 Map Fragment

  3. 3

    在一个文本文件中搜索另一个文本文件中的值

  4. 4

    如何遍历一个文本文件以打印到另一个文本文件?

  5. 5

    使用一个文本文件搜索Java中的另一个文本文件

  6. 6

    从当前文本文件中另一个文本文件的内容导入到记事本++中的特定行?

  7. 7

    Mockito,JUnit和Map嵌套在另一个类中

  8. 8

    在Scala中,如何检查一个Map是否包含另一个Map的所有条目?

  9. 9

    从文本文件读入对象的向量,在类中写入另一个txt文件

  10. 10

    在文本文件中读取多行,然后在另一个文本文件中写入

  11. 11

    如何解析python中的文本文件并打印到另一个文本文件或json文件中?

  12. 12

    如何从文本文件排序并写入另一个文本文件Java

  13. 13

    如何从文本文件排序并写入另一个文本文件Java

  14. 14

    从另一个文本文件替换文本文件中的行

  15. 15

    在c中逐行从另一个文本文件写入文本文件

  16. 16

    从文本文件中读取特定列的数据并写入另一个文本文件tcl

  17. 17

    如何比较两个文本文件的内容并在另一个文本文件中输出?文字1-文字2

  18. 18

    如何删除Windows中另一个文本文件中存在的文本文件中的所有行?

  19. 19

    如何读取行中特定单词的文本文件并将整行写入另一个文本文件?

  20. 20

    如何将时间从文本文件提取到另一个文本文件/列表中

  21. 21

    如何将内容从文本文件复制到C中的另一个文本文件

  22. 22

    如何在文本文件中提取不同的数据子集并将每个子集传递到另一个文本文件中?

  23. 23

    使用Java格式化文本文件内容后,如何读取文本文件内容并写入另一个文本文件?

  24. 24

    如何从另一个文件中删除基于字符串列表的多个文本文件的行?

  25. 25

    如何从终端读取文本文件并将输出保存到Java中的另一个文件?

  26. 26

    如何复制文本文件的内容并将其粘贴到从某行开始的另一个文件中?

  27. 27

    如何从终端读取文本文件并将输出保存到Java中的另一个文件?

  28. 28

    如何将文本文件复制到另一个文件?

  29. 29

    如何将文本文件复制到另一个文件?

热门标签

归档