Java 无法在另一个while循环中读取在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
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"));