2013-04-29 40 views
0

我想從一個csv文件中的項目放入一個hashmap。通過添加項目我的意思是分類他們。 csv充滿了問題列表中的答案。因此,CSV是建立這樣的:在for循環中添加項目到hashmap

Person  Question 
-   Do you wear glasses 

1   Yes 
2   Yes 
3   No 
4   Sometimes 

下一步我想要做的是閱讀的項目,並把答案中的鍵是答案的名稱和金額價值的HashMap那個特定的答案。

HashMap中應該是這樣前面的例子我給:

Yes, 2 
No, 1 
Sometimes, 1 

我循環,現在是這樣的:

for (int j = 0; j < dataPersonList.size(); j++) 
{ 
    // looping through the csv 
    while (t.hasNext()) 
    { 
     // looping through the hashmap 
     Map.Entry me = (Map.Entry)t.next(); 

     if (dataPersonVar.glasses.equals(me.getKey())) 
     { 
      // if the item in the csv is the same as the item in the hashmap 
      hm.put(me.getKey(), me.getValue() =+ 1); // the value gets +1 
     } 
     else 
     { 
      // a new item is made and gets automatically 1 
      hm.put(dataPersonVar.glasses,1); 
     } 
    } 
} 

但很明顯這是行不通的。我是hashmaps的入門者,但真的認爲hashmap是我的問題的解決方案。我正在加工。有誰知道如何解決這個問題?如果我不清楚,讓我知道!

在此先感謝

編輯:

按照要求在此,我發佈全碼:

import java.util.Iterator; 
    import java.util.Map; 

    HashMap hm = new HashMap(); 

    import de.bezier.data.*; 
    int totalParticipants; 
    int bgWidth = 1000; 
    int bgHeight = 1000; 
    int x; 
    int eSize = 10; 
    int opacity = 100; 
    float xLocation; 
    float yLocation; 
    String travelType; 
    int travelTime; 
    int border=400; 

    float dataMinLat=1000; 
    float dataMaxLat; 
    float dataMinLon=1000; 
    float dataMaxLon; 
    float xLocationMM = (5.17880); 
    float yLocationMM = (52.22541); 
    ArrayList dataPersonList = new ArrayList(); 
    ArrayList dataFunctionList = new ArrayList(100); 
    Point[] pointList = new Point[1000]; 
    float angle; 


    XlsReader reader; 

    PImage kaart; 

    void setup() 
    { 

     textSize(10); 
     size(bgWidth, bgHeight); 
     background(0); 
     noStroke(); 
     smooth(); 

     //kaart = loadImage("map.png"); 

     yLocationMM = 0 - yLocationMM; 
     reader = new XlsReader(this, "MMdata.xls"); // assumes file to be in the data folder 
     totalParticipants = reader.getLastRowNum(); 


     for (int i = 1;i < totalParticipants+1; i++) { 
     DataPerson dataPerson = new DataPerson(); 

     dataPerson.function = reader.getString(i, 23); 
     dataPerson.firstName = reader.getString(i, 1); 
     dataPerson.lastName = reader.getString(i, 2); 
     dataPerson.glasses = reader.getString(i, 20); 
     dataPerson.longitude = reader.getFloat(i, 55); 
     dataPerson.latitude = reader.getFloat(i, 54); 
     dataPerson.location = reader.getString(i, 8); 
     dataPerson.ownage = reader.getString(i, 14); 
     dataPerson.traveltime = reader.getInt(i, 31); 
     dataPerson.establishment = reader.getString(i, 58); 
     dataPerson.traveltype = reader.getString(i, 17); 

     dataPersonList.add(dataPerson); 
     } 

     for (int i = 0; i < dataPersonList.size(); i++) { 
     DataPerson person = (DataPerson) dataPersonList.get(i); 
     for (int j = 0; j < dataFunctionList.size() + 1; j++) { 

      DataFunction dataFunction = null; 
      if (j < dataFunctionList.size()) 
      { 
      dataFunction = (DataFunction) dataFunctionList.get(j); 
      } 
      if (dataFunction != null) { 
      if (person.function.equals(dataFunction.function)) { 

       dataFunction.persons.add(person); 
       dataFunction.amount ++; 
       break; 
      } 
      } 
      else { 
      dataFunction = new DataFunction(); 
      dataFunction.function = person.function; 
      dataFunction.amount = 1; 
      dataFunction.persons.add(person); 
      dataFunctionList.add(dataFunction); 
      break; 
      } 
     } 
     } 

     for (int i = 0; i < dataPersonList.size(); i++) { 

     DataPerson dataPersonVar = (DataPerson) dataPersonList.get(i); 
     if (dataPersonVar.longitude > dataMaxLon) { 
      dataMaxLon = dataPersonVar.longitude; 
     } 
     else if (dataPersonVar.longitude < dataMinLon) { 
      dataMinLon = dataPersonVar.longitude; 
     } 
     if (dataPersonVar.latitude > dataMaxLat) { 
      dataMaxLat = dataPersonVar.latitude; 
     } 
     else if (dataPersonVar.latitude < dataMinLat) { 
      dataMinLat = dataPersonVar.latitude; 
     } 
     } 
    } 

    class DataPerson 
    { 
     String function; 
     String firstName; 
     String lastName; 
     String glasses; 
     float longitude; 
     float latitude; 
     String location; 
     String ownage; 
     int traveltime; 
     String establishment; 
     String traveltype; 

     String fullName() 
     { 
     return firstName + " " + lastName; 
     } 
    } 

    class DataFunction 
    { 
     String function; 
     int amount; 
     ArrayList persons = new ArrayList(); 

     String getPersonNames() 
     { 
     String output = ""; 
     for (int i = 0; i < persons.size(); i++) { 
      DataPerson person = (DataPerson) persons.get(i); 
      output += person.firstName + "(" + person.glasses + ") "; 
     } 
     return output; 
     } 
    } 

    class Point 
    { 
     float x; 
     float y; 
    } 

    void draw() 
    { 
     background(0); 
     strokeWeight(2); 

     x=50; 
     int xText=80; 
     int procentGlasses; 
     noStroke(); 
     pushMatrix(); 
     scale(1.40, 0.89); 
     //image(kaart, -250, -360); 
     popMatrix(); 
     for (int i = 0; i < dataPersonList.size(); i++) { 

     DataPerson dataPersonVar = (DataPerson) dataPersonList.get(i); 
     if (dataPersonVar != null) { 
      xLocation = map(dataPersonVar.longitude, dataMinLon, dataMaxLon, border, bgWidth-border); 
      yLocation = map(dataPersonVar.latitude, dataMinLat, dataMinLat+(dataMaxLon-dataMinLon), border, bgHeight-border); 
      travelType = (dataPersonVar.traveltype); 
      noFill(); 

      if (travelType.equals("By car")) { 

      stroke(0, 0, 255, opacity+100); 
      } 
      else if (travelType.equals("By public transport")) { 
      stroke(255, 0, 0, opacity); 
      } 
      else { 
      stroke(255, opacity); 
      } 
      //text(dataPersonVar.firstName, xLocation, yLocation); 
      noStroke(); 
      strokeWeight(4); 
      stroke(100, 15); 
      strokeWeight(2); 
     } 
     } 

     for (int i = 0; i < dataPersonList.size(); i++) { 
     DataPerson dataPersonVar = (DataPerson) dataPersonList.get(i); 
     if (dataPersonVar != null) { 
      xLocation = map(dataPersonVar.longitude, dataMinLon, dataMaxLon, border, bgWidth-200); 
      yLocation = map(dataPersonVar.latitude, dataMinLat, dataMinLat+(dataMaxLon-dataMinLon), border, bgHeight-200); 
      noStroke(); 
      fill(255, 200); 
      ellipse(xLocation, yLocation, eSize, eSize); 
      //println(dataPersonVar.glasses); 
      Iterator t = hm.entrySet().iterator(); // Get an iterator 

      for (int j = 0; j < dataPersonList.size(); j++) { 

      while (t.hasNext()) { 
       Map.Entry me = (Map.Entry)t.next(); 
       println("die in de dataPersonshit is "+dataPersonVar.glasses+". En de andere waarde is "+me.getKey()); 
       if (dataPersonVar.glasses.equals(me.getKey())) { 
       hm.put(me.getKey(), ((Integer)me.getValue()) + 1); 
       } 
       else { 
       hm.put(dataPersonVar.glasses, 1); 
       //println("YEAH"); 
       } 
      } 
      } 

      /////////drawing the circle/////////////// 

      angle = ((PI*2)/15*1)/dataPersonList.size()*i; 
      stroke(255, 100, 50, 50); 
      noFill(); 
      strokeWeight(3); 
      pointList[i] = new Point(); 
      pointList[i].x = bgWidth/2+sin(angle)*400; // de punt van x = 400 (het middelpunt van de cirkel) + sin((360 graden)/het totaal 
      pointList[i].y = bgHeight/2+cos(angle)*400; 
      beginShape(); 
      vertex(xLocation, yLocation); 
      quadraticVertex((xLocation+pointList[i].x)/2, yLocation, pointList[i].x, pointList[i].y); 
      endShape(); 
     } 
     } 


    } 

不幸的是我不能給你的CSV但我希望代碼至少幫助。

+0

什麼是'dataPersonList',你怎麼可以直接做'dataPersonVar.glasses'如果'dataPersonVar'是'List'? – NINCOMPOOP 2013-04-29 12:15:34

+0

我做了一個類,我從csv中存儲答案。因此,所有關於眼鏡問題的答案都存儲在dataPersonVar.glasses中。 所以要非常清楚;)。如果我循環遍歷課堂,我會得到是的,是的,不,是的,有時,是的......等等 – klipperdeklip 2013-04-29 12:22:00

+0

錯誤處理給出的順便說一句是:「作業的左側必須是變量」 – klipperdeklip 2013-04-29 12:22:27

回答

0

您並不需要遍歷地圖來完成您似乎正在嘗試做的事情。下面是一個CSV類似的例子如你所描述:

import java.util.Map; 
Map<String, Integer> answers = new HashMap<String,Integer>(); 
//String [] fileInput = loadStrings("question.csv"); 
String [] fileInput = new String [] { 
    "1,Yes", "2,No", "3,Yes", "4,Sometimes", "5,Yes", "6,No", "7,No", "8,No" 
}; 
for (int i = 0 ; i < fileInput.length; i++) { 
    String [] line = split(fileInput[i],","); 
    String newAnswer = line[1]; 
    if(!answers.containsKey(newAnswer)) answers.put(newAnswer,1); 
    else answers.put(newAnswer,answers.get(newAnswer)+1); 
} 
println(answers);