Java中的方法一致性问题

Java中的方法一致性问题,java,memory-management,synchronization,enumeration,Java,Memory Management,Synchronization,Enumeration,我真的不了解java内存管理,所以这完全是我的错,我只需要指出解决方案的方向 我正在处理一个巨大的数据集。我有一个将字符串作为输入并返回值的方法。该值基于字符串的内容。如果我以缓慢、精细、一次性的方式执行此操作: while (!input.equals("#")) { System.out.print("Input input (logical redundancy): "); Scanner scan = new Scanner(System.in);

我真的不了解java内存管理,所以这完全是我的错,我只需要指出解决方案的方向

我正在处理一个巨大的数据集。我有一个将字符串作为输入并返回值的方法。该值基于字符串的内容。如果我以缓慢、精细、一次性的方式执行此操作:

while (!input.equals("#")) {

        System.out.print("Input input (logical redundancy): ");
        Scanner scan = new Scanner(System.in);
        input = scan.nextLine();

        Analyzer analysis = new Analyzer(new Dictionary());
        System.out.println(analysis.analyzeString(input));
    }
没有问题,而且完全一致。
字典
对象是一个数组列表,其中包含特定单词的密钥对信息

但是,如果我试图在更大的枚举范围内应用该方法,那么我会从analyze方法返回坏数据。就比例而言,这些值在正确的范围内,但它们并不对应于它们应该对应的字符串。至少在我看来,返回的数据是随机的。我已经尝试了各种尝试枚举的方法,但这就是我现在所拥有的:

while (rs.next()) {
            int id = rs.getRow();
            Analyzer analysis = new Analyzer(dict);
            String entry = rs.getString(5);
            double val = analysis.analyzeString(entry);
            pst.setDouble(1, val);
            pst.setInt(2, id);
            System.out.println(val + " : " + rs.getString(5));
            pst.executeUpdate();
}

在这种尝试中,即使输入了相同的字符串,也与从
analyzeString
方法返回的结果极不一致。如何修复不一致性?它是否与同步有关?

首先,请定义不一致性。我猜你的意思是,你得到的价值不是预期的。如果是,请打印循环中的输入和输出,并查看您是否传递了您认为传递的内容。我看到您正在传递查询结果第5列的值
您是否记得它不是基于0的索引,而是基于1的索引

其次,是否可以将Analyzer实例化保持在循环之外

Analyzer analysis = new Analyzer(dict);
while (rs.next()) {
            int id = rs.getRow();

            String entry = rs.getString("Use_Column_name_Here_to_be_SAFE");
            double val = analysis.analyzeString(entry);
            pst.setDouble(1, val);
            pst.setInt(2, id);
            System.out.println(id+": "+ val + " : " + entry);
            pst.executeUpdate();
}

要调试代码,我建议您使用调试器逐步调试代码。在IDE中,单击“运行”旁边的按钮


我真的不懂java内存管理

我怀疑这与此事无关

如何修复不一致性

澄清你所说的不一致是什么意思。这可能意味着什么。除非你对问题有了一个好的认识,否则很难解决它

这与同步有关吗

这是你的密码。如果你不知道,没人知道。我想不是


顺便说一句:我假设
pst
rs
与另一个没有任何关系

什么是rs的类型?如果是
扫描仪
,那么您的问题可能只是
nextLine
getString
?您能否发布
analyzeString()
方法?几个问题:rs是扫描仪吗?为什么不在第二个例子中的每个循环迭代中分配一个新字典,就像在第一个例子中那样?是否有多个线程访问任何可能导致同步错误的内容?@DZittersteyn
rs
是一个结果集@亨特:不,我真的不喜欢那样做。本质上,它在字符串中查找关键字的子字符串并返回它们的频率@卷心菜
rs
是一个结果集,我通过MySQL数据库访问这些数据。生成字典文件需要2秒钟,因此为了提高效率,我不创建新的字典文件。也许我应该让dictionary类成为final?您是否单步执行了代码?如果我在循环之外创建
分析器
,那么返回的值就变成了一个运行求和,这很奇怪,因为在
analyzeString()
方法中,我将最终值中涉及的所有变量重置为0。下面是一个发生的示例:
8072:-229.76000000000022 8073:-229.3600000000002 8074:-229.56000000000023
I输入值。单步输入代码并检查得到的结果。可能是您的分析器中存在错误。它没有像预期的那样工作。我已经更新了问题,更好地描述了正在发生的事情。