2015-07-03 52 views
0

我有以下問題:我想將諸如1/2,3/4的分數轉換爲Java中的口語詞,如「One half」或「Three quarters」。將分數轉換爲Java中的單詞

是否有產生輸出接收數字基本上

喜歡的東西任何方式(僞代碼)或實用的Java:

getSpokenWords(numerator, denominator)返回「一半」

這將是非常讚賞。

+1

你是否讓我們擁有'getSpokenWords'方法? –

回答

1

您可以簡單地通過使用if-elseswitch很容易實現你的邏輯你getSpokenWords(numerator, denominator)因爲你知道你的更好的投入預計爲denominatornumerator,因爲所有的預期投入由我們可能不值得&適合你。 您可以維護HashMap<Integer, String>denominatornumeratorIntegerdenominatornumeratorString是他們同行的Alpha值,並可以從它相應get()值。

+0

如果有效,您可以將其標記爲正確 –

1

沒有標準庫,我知道這樣做,據我所知,你不能爲此做出可擴展的解決方案。

我建議的一種方法是創建數組,基本上將數字映射到他們的單詞對應。例如,

String[] numerators = {"One", "Two", "Three", ... // etc., until you reach your desired limit 
String[] denominators = {"whole", "hal", "third", ... 

你getSpokenWords(分子,分母)方法然後可以串聯這些字符串,並根據需要添加多個結局。 (「Half」由於其不規則的複數形式而被列爲「hal」,因此可以根據需要連接「ves」或「f」)

編輯:如果你想要聰明,使用循環,除法和模數來將更高的數字分隔爲他們的位置值。例如,525600可以分爲525和600,在這裏你可以得到相當於525(525)的文本並附加「千」。當然,獲得字符串「五百二十五」也需要分離。

0

到目前爲止,最簡單和更直接的解決方案,尤其是如果你只對感興趣,而不是一般的是使用散列表。

HashMap<String, String> hashmap = new HashMap<String, String>(); 
hashmap.put("1/2", "One half"); 
hashmap.put("3/4", "Three quarters"); etc 

從那裏所有你需要做的就是將傳遞的數字轉換爲字符串。
例如

int numerator = 1; 
int denominator = 2; 
String fraction = numerator + "/" + denominator; 
String word = hashmap.get(fraction); 

所以基本上:

public String getSpokenWords(int numerator, int denominator) { 
    String fraction = numerator + "/" + denominator; 
    String word = hashmap.get(fraction); 
    return word == null? "": word; 
} 

只需創建一個大的HashMap與你的情況下

1

http://www.rgagnon.com/javadetails/java-0426.html

他,你只需要編輯一個很少使用正常的數字做了他的代碼爲nuberator,你將需要第二個分母添加ith或第三或其他。

+0

一旦您超過前二十位,序數(分母)的結尾就會令人驚訝地規律。第一爲1,第二爲2,第三爲3,第五爲5,第八爲8,第三爲其他。應該很容易適應你連接到序號的代碼。 –