2013-08-01 24 views
1

我是Java的初學者,所以我通過實驗學習。我想創建一個類,它需要一種類型的騎乘作爲一個字符串和乘客的數量作爲一個整數。我決定使用地圖,因爲它可以讓我與相關的個人保持一種搭乘類型。在地圖java中查找值的總和

//How many attendants in total 
System.out.println("How many attendents today?: "); 
int numberOfAttendents = Integer.parseInt(bf.readLine()); 
System.out.println("Total number of attendents: " + numberOfAttendents); 

Map<String, Integer> typeOfRide = new HashMap<String, Integer>(); 
boolean run = true; 
final String counterEnd = "stop"; 
while(run) 
{ 
    System.out.println("What type of ride?: "); 
    String nameOfType = bf.readLine(); 
    if(nameOfType.equalsIgnoreCase(counterEnd)) 
    { 
     run = false; 
    } 
    else 
    { 
    System.out.println("Number of riders?: "); 
    Integer numberPerType = Integer.parseInt(bf.readLine());     
    typeOfRide.put(nameOfType, numberPerType); 
    } 
} 

因此,上面的部分編譯沒有問題。但是,當我嘗試增加每種騎行類型的騎手人數時,我有一些困難嘗試想辦法。我明白我使用的增強型for循環是爲數組而不是map。

//Adding individual entries of same ride 
    for(Integer i: typeOfRide) 
    { 
     int sum = 0; 
     System.out.println("Which ride type?: "); 
     String typeNumber = bf.readLine(); 
     sum = sum + typeOfRide.get(typeNumber); 
     System.out.println("Total number of riders per" + typeNumber + ":" + sum); 
    } 

所以,如果你們都可以建議一種方法來獲得總和,我將不勝感激。謝謝!

+0

爲什麼在循環中要求用戶輸入?你想要得到的總和是什麼? –

+0

@SimonAndréForsberg:我在編寫代碼時使用UI b/c,它是在我不知道爲什麼會提供類型的遊樂設施的假設下。由於用戶知道他們輸入的騎行類型,我要求他們重新輸入騎行類型,他們希望知道騎手的總數。希望這清除你的疑問。 – Ram

+0

然後請注意,用戶會被問到騎乘類型的次數與騎乘類型的次數相同,這是有點奇怪的設計。 –

回答

1

typeOfRide是一個Map,它沒有實現迭代,它應該給你一個上面的編譯錯誤。

對於循環,您可能需要爲使用typeOfRide.entrySet()typeOfRide.keySet()typeOfRide.values()

除了vinodadhikary的有關移動int sum = 0;的for循環以上,循環上這應該解決這個問題的答案。

+0

當我嘗試時,.values()方法起作用,但編譯器顯示所有計算。例如:水,30;水,40;氣球,50.如果我運行水編譯器,我只想看到70.但編譯器輸出:30,70.你知道問題出現在哪裏嗎? – Ram

+0

@Ram可能是因爲你的行'System.out.println(「每個」+ numberNumber +「:」+ sum)的騎手總數;'是在循環中。我不知道你希望它如何表現,所以我在那裏幫不了你,但我很高興爲你解決了編譯器錯誤。 –

+0

@Ram你可能想閱讀上面的Java Devil的評論,並理解HashMap的概念。一個密鑰不能在HashMap中有多個值 –

2

您正在初始化sum,導致sum的值爲typeOfRide.get(typeNumber)。在for循環上方移動線int sum = 0;