2016-01-29 61 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

这似乎是个窍门。谢谢 –