Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 无法在另一个while循环中读取在while循环中创建的地图_Java - Fatal编程技术网

Java 无法在另一个while循环中读取在while循环中创建的地图

Java 无法在另一个while循环中读取在while循环中创建的地图,java,Java,我试图在while循环中创建对象的贴图,并在其他循环中使用它: int x = 0; Map<String, Node> map = new HashMap<>(); BufferedReader br = new BufferedReader(new FileReader("text.txt")); String line; while ((line = br.readLine()) != null) { if (line

我试图在while循环中创建对象的贴图,并在其他循环中使用它:

int x = 0;
    Map<String, Node> map = new HashMap<>();
    BufferedReader br = new BufferedReader(new FileReader("text.txt"));
    String line;
    while ((line = br.readLine()) != null) {
        if (line.contains("(") == true) {
            StringTokenizer st;
            st = new StringTokenizer(line, "()");
            String noden = st.nextToken();
            int heu = Integer.parseInt(st.nextToken());
            x++;
            //System.out.println(noden + "=" + heu);
            map.put("n" + x, new Node(noden, heu));
        }
    }
intx=0;
Map Map=newhashmap();
BufferedReader br=新的BufferedReader(新的文件阅读器(“text.txt”);
弦线;
而((line=br.readLine())!=null){
if(line.contains(“”==true){
StringTokenizer st;
st=新的StringTokenizer(行“()”);
字符串noden=st.nextToken();
int heu=Integer.parseInt(st.nextToken());
x++;
//System.out.println(noden+“=”+heu);
map.put(“n”+x,新节点(noden,heu));
}
}
我可以在此循环外访问此映射并获取其中存储的数据,但当我尝试在另一个while循环中使用它时,它是空的:

while ((line = br.readLine()) != null) {
        if (line.contains("->") == true) {
            StringTokenizer st;
            st = new StringTokenizer(line, "-> ,");
            for (Map.Entry<String, Node> entry : map.entrySet()) {
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
            }
            String Source_node = st.nextToken();
            String Dest_node = st.nextToken();
            //System.out.println(Source_node + "->" + Dest_node);
            for (int i = 1; i <= x; i++) {
                Node n1 = map.get("n" + i);
                System.out.println(n1.value);
            }
            int eweight = Integer.parseInt(st.nextToken());
            for (int i = 1; i <= x; i++) {
                Node n1 = map.get("n" + i);
                System.out.println(n1.value);
            }

            for (int i = 1; i <= x; i++) {
                Node node_source = map.get("n" + i);
                Node node_dest = map.get("n" + i);
                if (Source_node.equals(node_source.value)) {
                    if (Dest_node.equals(node_dest.value)) {
                        node_source.adjacencies = new Edge[]{
                            new Edge(node_dest, eweight)
                        };
                        System.out.println(node_source.pos);
                    }
                }
            }
        }
    }
while((line=br.readLine())!=null){
if(line.contains(“->”)==true){
StringTokenizer st;
st=新的StringTokenizer(行“->,”);
对于(Map.Entry:Map.entrySet()){
System.out.println(“Key=“+entry.getKey()+”,Value=“+entry.getValue());
}
字符串Source_node=st.nextToken();
字符串Dest_node=st.nextToken();
//System.out.println(源节点+“->”+目的节点);

对于(int i=1;i程序甚至从未进入第二个while循环,因为BufferedReader br已经读取了第一个循环中的所有行。
br.readLine()
因此将始终返回
null

一个简单的修复方法是在两个while循环之间创建一个新的BufferedReader

br = new BufferedReader(new FileReader("text.txt")); 

但是,我会考虑找到一个不同的方法,因为两次读取同一个文件不是最优的。

两个循环都在同一个方法中。两个循环都是主要方法。你确定你没有清除两个循环之间的映射吗?两个环之间的打印图大小在两个循环之间做了一个新的BuffReDead?甚至进入SECO吗?nd while loop?因为在第一个循环之后,BufferedReader已经读取了所有行。。。
br = new BufferedReader(new FileReader("text.txt"));