2010-10-08 50 views
1

我想寫一個條件語句,根據變量是否是一個int或double,即Java的標識整數和雙打

if (x is a double) 
    do stuff 
else if(x is an int) 
    do stuff 
else 
    do stuff 

我知道這可能不是一個好主意,但它只是我現在的選擇。這可能嗎?

+6

你知道在編譯時什麼類型的基本變量是在Java中。在什麼情況下您需要使用條件語句進行檢查?你是從一個字符串或其他東西轉換用戶輸入? – 2010-10-08 02:09:19

+0

我也想弄明白這個情況。這個問題還有更多嗎? – birryree 2010-10-08 02:11:33

+1

那麼它的這個:http://stackoverflow.com/questions/3886818/java-array-manipulation我只是有問題時,詮釋比例因子是0.5。所以我想,如果我有不同的指示,取決於它是否加倍,我可能會消除這個問題。它是最後一個希望類型的東西。我不知道還有什麼要做。 – Snowman 2010-10-08 02:13:48

回答

4

我不知道X如何能是一個int或沒有你知道在編譯的時候了一倍,但

void dostuff(int x) { 
    do stuff... 
} 

void dostuff(double x) { 
    do stuff... 
} 

然後

dostuff(x) 

將調用適當的方法。

1

編輯補充:我不認爲這個問題真的是你想要的,根據你對原始問題的評論。我會發布對其他問題的評論,試圖爲yoru真正的問題提供一些幫助。

正如比爾蜥蜴說,你就知道在編譯時什麼類型的原始是:

 
public void foo(int x, double y){...} 

在另一方面,如果你把你的類型的另一個對象的內部,像

 
Vector v = new Vector(); 
v.add((int)1); 
v.add((double)1.0)); 

那麼你真的處理的不是物體的對象。每個基本元件具有一個對應的類:

  • INT具有整數
  • 雙有雙
  • 持股量浮法
  • 布爾具有布爾

您可以使用instanceof關鍵字來確定你正在處理的是什麼類型(你可以用任何類來做到這一點):

 
if(x instanceof Double) { 
    doDoubleThing(); 
} else if(x instanceof Integer) { 
    doIntegerThing(); 
} // and so on 
0

如果您有能力使用兩種方法,那麼atk寫的是有效的。如果這不是一個選項,或者你不想這樣做(個人認爲它可能更具可讀性並且不需要重複一個方法,只需執行if-else分支,取決於你的代碼),那麼可以使用反射:

Class intClass = Integer.class; 
Class doubleClass = Double.class; 
if intClass.isInstance(foo) 
    bar(); 
else if doubleClass.isInstance(foo) 
    spam(); 
else 
    eggs(); 

這可能不一定是最好的解決方案。只是覺得你應該知道這件事。

1

我猜你試圖檢查一個數字是否有小數部分。

double n; 
if(n-floor(n)>0) 
    it has a decimal part 
else 
    it's an integer