2012-01-14 113 views
0
public static double Num (JTextField field){ 
    String s1 = field.getText(); 
    String n = new String ("N"); 
    String e = new String ("E"); 
    String w = new String ("W"); 
    String s = new String ("S"); 
    if (s1.equalsIgnoreCase(n)){ 
    return 1;} 
    else if (s1.equalsIgnoreCase(e)){ 
    return 1;} 
    else if (s.equalsIgnoreCase(s)){ 
    return -1;} 
    if (s1.equalsIgnoreCase(w)){ 
    return -1;} 
} 

嗨,我是Java編程的新手。 嗯,我justed想從雙重返回特定值。 我附加了部分代碼。我選擇了double,因爲我需要在主類代碼的後面部分中使用它的值。使用if/else/if語句從雙精度值返回值

在此之後我收到一個錯誤說

此方法必須返回一個double類型的結果。

並且該程序建議在最後添加(又一個)返回。

+0

不需要創建'new String(「N」)',只需要比較你現在的''N「'。可能要考慮邏輯或者('||')代替 – 2012-01-14 19:08:28

回答

0

我不知道Java,但這些看起來像問題。

你在很多地方都返回一個整數。我認爲它應該是一個1.0或類似的Java讓你返回它。另外,如果if/else條件不匹配,則不會有回報。這意味着您的函數可能不會返回一個也是潛在錯誤的double。這是建議。

+0

實際上,java編譯器能夠將整數轉換爲雙精度,所以返回1也被接受爲雙精度值 – TonioElGringo 2012-01-14 19:12:17

1

1和-1表示整數。它期望返回一個float,而不是int。如果你想返回一個int,而不是,改變「雙」爲「int」:

public static int Num (JTextField field){ 

另外,如果你想返回一個浮動,加上」 .0" 的返回值;

return 1.0; 
return -1.0; 

它告訴你需要另外return語句在方法結束的原因是因爲它必須回報的東西,而且也沒有辦法,以確保您的方法返回的東西。如果你知道的一個如果的永遠是真實的,你可以在最後的改變,如果一個東西:

if (s1.equalsIgnoreCase(n)) 
    return 1.0; 
else if (s1.equalsIgnoreCase(e)) 
    return 1.0 
else if (s.equalsIgnoreCase(s)) 
    return -1.0; 
else 
    return -1.0; 

如果他們都可能是假的,在同一時間,你必須在最後再添迴歸之作肯定會返回一個值;

if (s1.equalsIgnoreCase(n)) 
    return 1.0; 
else if (s1.equalsIgnoreCase(e)) 
    return 1.0 
else if (s.equalsIgnoreCase(s)) 
    return -1.0; 
else if (s.equalsIgnoreCase(w)) 
    return -1.0; 
return 0.0; 
+0

不是返回一些可疑值,而是拋出一些可疑的值一個運行時異常,畢竟我們顯然不希望字符串不等於這裏給出的選項之一,因此返回垃圾將會使調試變得更加困難。 – Voo 2012-01-14 19:14:27

1

您需要處理您指定的字母均不等於字段文本的情況。在這種情況下,您的四個return語句都不會被調用,並且Java不知道要返回什麼值。正如編譯器已經建議的那樣,解決方案是在方法主體的末尾添加return語句,該語句返回默認值。

2

您必須在所有if/else if語句之外添加return語句。編譯器給出了這個錯誤,因爲編譯時發現,如果沒有if語句得到滿足,程序不可能返回任何值。

根據你的邏輯,你可能會認爲if語句之一肯定會被滿足,但編譯器不知道。所以你應該添加一個假的返回值,(如return 0),以避免編譯器給出錯誤。

0

如果您在方法簽名中聲明返回類型,則始終需要返回該類型的某些內容。

就你而言,如果文本既不是N,E,W或S,也不會返回任何內容。Java不允許這樣做。

如果文本應該始終是其中一個值,則拋出異常並在調用代碼中處理它。否則返回一個默認值。

您不需要將返回類型聲明爲double,因爲之後需要double值。只要返回一個int,它就會隱式地轉換爲double。

另外,您不需要爲所有內容創建一個String對象,這隻會讓您的代碼變得不必要。只需要寫: if(s1.equalsIgnoreCase(「N」)