2016-04-23 159 views
-1

據我研究,沒有辦法匹配一個字符串與變量。大概我用的是錯誤的詞,這裏是我的意思是匹配:
String grade =「a」;
double a = 4.0;
而且沒有辦法將String等級的值與double a相關聯。有沒有辦法將String與方法進行匹配?

同樣,我想要做的是將String的值與方法關聯。也許我在錯誤的軌道上,讓我簡單地解釋我想要實現的:
在類播放器中,有一個返回This.name的String name()方法。沒有圖形設計,用戶與程序進行通信的唯一方式就是輸入。基本上,當人類名字的時候,我要命名方法來運行。我很新,而且我能想到的唯一方法是使用一堆if語句,並且爲每個添加的方法添加另一個if語句對我來說聽起來並不合適。

注意:我需要String關聯的原因是因爲我打算使用javax.swing.JTextArea從用戶獲取輸入,該用戶返回String。

在此先感謝

+0

你可以通過[反射](http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name-as-a-字符串),但您提出的方法可能足以滿足您的需求。 – Zong

+1

從你的問題中讀取,看起來你想調用一個基於它的名字的方法,這個方法將被用戶輸入。在這種情況下,您需要閱讀有關Reflection API的信息http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name- as-a-string – Tunaki

+1

你可以使用一個很好的舊開關 –

回答

0

是的。它被稱爲Map

這裏有一個如何使用一個一些示例代碼:

Map<String, Double> map = new HashMap<>(); 

map.put("grade", 4.0); 

double a = map.get("grade"); 

如果你想存儲的各種值類型使用Map<String, Object>的,但你必須檢索和使用所返回的值時,使不安全的類型轉換從get()

0

Java不是像Python或Perl動態解釋語言。

任意字符串值與關聯,你應該使用一個Map<String,ValueClass>,其中ValueClass是關聯的值,如IntegerFloatBigDecimal或你自己的價值類。

0

因爲等級通常是從A到F固定的,我會用一個enum地圖每個年級的數值。當你需要A級的數值

enum Grade { 
    A(4.0), B(3.0) // etc... 

    private double val; 

    private Grade(double val) { 
     this.val = val; 
    } 

    public double getVal() { 
     return val; 
    } 
} 

然後用Grade.A.getVal()

相關問題