Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HashMap删除传递性关系_Java_Hashmap_Break - Fatal编程技术网

Java 使用HashMap删除传递性关系

Java 使用HashMap删除传递性关系,java,hashmap,break,Java,Hashmap,Break,我使用下面的代码使用hashmap删除传递性child->parent关系。(hashmap数据集以子项->父项的形式出现。) 线路。如果我取消注释该行,那么代码工作正常。但是,如果我将其保留为注释,则会收到一条错误消息,如下所示: Exception in thread "main" java.lang.StackOverflowError at java.util.HashMap.hash(HashMap.java:362) at java.util.HashMap.getEntry(Has

我使用下面的代码使用hashmap删除传递性child->parent关系。(hashmap数据集以子项->父项的形式出现。)

线路。如果我取消注释该行,那么代码工作正常。但是,如果我将其保留为注释,则会收到一条错误消息,如下所示:

Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:362)
at java.util.HashMap.getEntry(HashMap.java:462)
at java.util.HashMap.get(HashMap.java:417) 
为什么我会有这种奇怪的行为?

编辑:

import java.util.*;
导入java.lang.*;
导入java.io.*;
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
//你的密码在这里
因子_传递性(新HashMap(){{
卖出(“abc”、“abc”);
put(“ghi”、“ghi”);
}},假);
}
私有静态空因子_传递性(映射数据集,布尔完成){
如果(!完成){
complete=true;//假设在这项检查中一切都会正常。
对于(Map.Entry对:dataset.entrySet()){
if(dataset.containsKey(pair.getValue())){
完整=错误;
字符串值=dataset.get(pair.getValue());
put(pair.getKey(),value);
System.out.print(“hello”);
打破
}
}
因子传递性(数据集,完整);
}
}
}

现在您可以看到这段代码是递归的,它不断调用factor_transitivity方法并一次又一次地打印“hello”。即使我注释掉该行,也会发生相同的错误(),这是由于该方法的递归性质。

向我们展示更多堆栈。提供一个,包括一个填充了数据的映射,显示错误实际发生的位置。是的,我会在自己能够识别出数据片段后立即上载一个包含导致问题的数据的映射。我有一个非常大的输入数据集,所以我需要一些时间来亲自查看。我指出代码与取消注释/注释行没有任何关系。错误在地图上。当有问题的行甚至无法执行时,您没有演示任何内容。已编辑,但我再次找不到与打印行的注释/取消注释有任何联系
//System.out.println("")
Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:362)
at java.util.HashMap.getEntry(HashMap.java:462)
at java.util.HashMap.get(HashMap.java:417) 
import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
  public static void main (String[] args) throws java.lang.Exception
  {
   // your code goes here
   factor_transitivity(new HashMap<String,String>(){{
     put("abc","abc");
     put("ghi","ghi");
     }},false );
   }
   private static void factor_transitivity(Map<String,String> dataset, boolean complete) {
   if (!complete) {
     complete = true; // Assume that on this check everything will come out to be OK.
     for (Map.Entry<String, String> pair : dataset.entrySet()) {
        if (dataset.containsKey(pair.getValue())) {
            complete = false;
            String value = dataset.get(pair.getValue());
            dataset.put(pair.getKey(),value);
            System.out.print("hello");
             break;
           }
       }
   factor_transitivity(dataset, complete);
  }
 }
}