2016-01-29 127 views
1

我有一個名爲元音的類,它包含5個表示每個元音的變量。用戶輸入一個句子,一些巫術發生,方法計數元音一個打印他們:迭代通過groovy中的類成員

[a = 9, e = 5, i = 7, o = 5, u = 6]

在此之後,要求用戶輸入一個隨機整數,另一個方法完成了所有4個基本的數學運算,如下:

input 
3 

output 
a --> 9 * 3 = 27 
a --> 9/3 = 3 
a --> 9 + 3 = 12 
a --> 9 - 3 = 6 

到目前爲止,我已經成功地做到這一點與20個printlns(1爲每個元音每個操作),但是這可能會以某種方式使用循環優化? 我發現了一些關於反射的信息,但我並不真正瞭解它。

+2

這將有助於分享您的代碼。將會有各種解決方案,但最有可能取決於你目前有什麼 – tddmonkey

+4

我沒有看到一個很好的原因,有單獨的元音變量;看起來更像是一個簡單的從字符串(字母)=> int(count)的映射,這使得這個微不足道,而且根本不需要反射。沒有做最簡單的事情的理由是什麼? –

+0

我沒有誠實地想到這個方法,而且我認爲上課是一條路。我不是一個真正有經驗的程序員,所以每個批評都非常受歡迎。 –

回答

4

您的對象的成員可通過調用getProperties。每個對象都有一個名爲class的屬性,您可以忽略它,並且未定義順序,所以'e'可能會出現在'a'之前的屬性中。例如:

class Vowels { 
    int a, e, i, o, u 
} 

def v = new Vowels(a: 9, e: 5, i: 7, o: 5, u: 6) 
v.properties.each { name, value -> 
    if (name != 'class') { 
     println "$name --> $value * 3 == ${value * 3}" 
     ... 
    } 
} 
+1

訂購可以輕鬆解決。 'v.properties.sort {it.key} .each {name,value - > ...}':) – dmahapatro

+0

這似乎是個竅門。謝謝 –