2013-04-21 44 views
-4

我今天早些时候问过这个问题,但答案并没有帮助我解决我的问题。以为我可以再次提出更新,希望更接近我的问题。如何显示两个物体相邻?

如何显示Q与X相邻,R与X(也)相邻,P与R相邻等等......? 文本文件

Q X 
R X 
P R 
P W 
W S 
S T 
T W 
W Y 
Y R 
Y Z 

所以它会输出到屏幕上:代码

Q is adjacent to X 
R is adjacent to X 
P is adjacent to R (tab or spaces) W 
etc etc etc 

段的读取文件并将它们存储到两个不同的ListArray的

while (theFlightFile.hasNext()) { 
     String cityFrom = theFlightFile.next(); 
     String cityTo = theFlightFile.next(); 
     City cityA = new City(cityFrom); 
     City cityB = new City(cityTo); 

     cityToList.add(cityA); 
     cityFromList.add(cityB); 
     //testing input reading... 
     //System.out.println(cityFrom + " -----> " + cityTo); 
    } 

/** 
* Displays to the screen, a list of all cities served by the airline 
* along with the names of cities to which each is adjacent. 
*/ 
public void displayFlightMap() { 
    int i = 0; 
    while (!cityStack.isEmpty() && topCity.equals(destinationCity)) { 
     displayAdjacentCities(cityFromList.get(i)); 
     i++; 
    } 
} 

/** 
* Displays to the screen, the names of all cities which are are adjacent 
* to aCity; aCity is assumed to be a valid city served by the airline. 
* @param aCity The city for which the adjacency list is desired. 
*/ 
public void displayAdjacentCities(City aCity) { 
    String str = ""; 
    for (City cityA : cityToList) { 
     for (City cityB : cityFromList) { 
      if (cityA != cityB) { 
       str = cityA + " is adjacent to " + cityB; 
      } 
     } 
     System.out.println(str); 
    } 
} 

什么版画是什么看起来像cityToList打印10倍,这一切都说它毗邻'Z'

+4

不,不,如果给出的答案不好,就直接说出来,等待新答案。你不能再问这个问题。 – 2013-04-21 06:22:21

+0

当您拥有一大组输入时,这是昂贵的。使用带有'ArrayList'的'HashMap'作为包含'HashMap'键的相邻值的值。 例如:'HashMap >' – 2013-04-21 06:22:36

+0

@MrLister我不知道其他人是否会回答...相信我,我辩论发布这个坚实的30分钟... – trama 2013-04-21 06:25:34

回答

1

@trama
如果您有兴趣,这里是使用HashMap的实现。

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Set; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class TestAdj { 

    HashMap<String, ArrayList<String>> map; 


    public TestAdj() { 
     BufferedReader br = null; 

     try { 
      br = new BufferedReader(new FileReader("input.txt")); 
      map = new HashMap<String, ArrayList<String>>(); 
      String line = null; 
      while ((line = br.readLine()) != null) { 
       String[] set = line.split("\t"); 
       if (map.containsKey(set[0])) { 
        map.get(set[0]).add(set[1]); 
       } else { 
        ArrayList lst = new ArrayList<String>(); 
        lst.add(set[1]); 
        map.put(set[0], lst); 
       } 
      } 
     } catch (Exception ex) { 
      Logger.getLogger(TestAdj.class.getName()).log(Level.SEVERE, null, ex); 
     } finally { 
      try { 
       br.close(); 
      } catch (IOException ex) { 
       Logger.getLogger(TestAdj.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 

    public void displayAdj() { 
     Object[] sources=map.keySet().toArray(); 

     for (int i = 0; i < sources.length; i++) { 
      System.out.print(sources[i]+" -->"); 
      System.out.println(map.get(sources[i])); 
     } 
    } 

    public static void main(String[] args) { 
     new TestAdj().displayAdj(); 
    } 
} 
+0

为什么这是投票-1? – 2013-04-21 07:23:31

+0

我试着用它们,但它似乎没有为我工作。但我不是那个投你一票的人。 – trama 2013-04-21 07:28:01

+0

这是我的输出。 [R,W] T→[T] R→[ X] Y - > [R,Z] – 2013-04-21 07:32:20

-1

您如何尝试使用某种地图来存储您的列表?

// Storing the cities: 
HashMap<City, LinkedList<City>> cityList = new HashMap<City, LinkedList<City>>(); 
String cityFrom = theFlightFile.next(); 
String cityTo = theFlightFile.next(); 
City cityA = new City(cityFrom); 
City cityB = new City(cityTo); 

LinkedList<City> currentFollowers; 
if (!cityList.containsKey(cityA)) { 
    currentFollowers = new LinkedList<City>(); 
    cityList.put(cityA, currentFollowers); 
} else { 
    currentFollowers = cityList.get(cityA); 
} 

currentFollowers.add(cityB); 
cityList.put(cityA, currentFollowers); 

// For the output you could still use a String: 
public void displayAdjacentCities(City aCity) { 
    String output = aCity + " is adjacent to"; 
    for(City cityTo : cityList.get(aCity)) { 
      output += " " + cityTo; 
    } 
    System.out.println(output); 
} 

// and your displayFlightMap-Method could look like:  
for(City from : cityList.keySet()) { 
    displayAdjacentCities(from); 
}