2012-09-19 22 views
0
import javax.swing.JOptionPane; 

public class Speler 
{ 

    public String naam; 
    public String aantalKeerGespeeld; 
    public String behaaldePunten; 
    public String spelersInfo; 


    public String setNaam(){ 
     return naam = JOptionPane.showInputDialog("Hoe heet je?"); 
    } 

    public String setAantalKeerGespeeld(){ 
     return aantalKeerGespeeld = JOptionPane.showInputDialog("Hoe vaak heb je gespeeld?"); 
    } 

    public String setBehaaldePunten(){ 
     return behaaldePunten = JOptionPane.showInputDialog("Hoe veel punten heb je behaald?"); 
    } 

    public String setSpelersInfo(){ 
     **return naam = JOptionPane.showInputDialog("Hoe heet je?"); 
     return aantalKeerGespeeld = JOptionPane.showInputDialog("Hoe vaak heb je gespeeld?"); 
     return behaaldePunten = JOptionPane.showInputDialog("Hoe veel punten heb je behaald?");** 


    } 
    public String getNaam(){ 
     return naam; 
    } 

    public String getAantalKeerGespeeld(){ 
     return aantalKeerGespeeld; 
    } 

    public String getBehaaldePunten(){ 
     return behaaldePunten; 
    } 

    public String getSpelersinfo(){ 
     return naam; 
     return aantalKeerGespeeld; 
     return behaaldePunten; 
    } 
}  

看起來像我不能返回或設置多個值。剛開始學習Java,很難在任何地方找到答案。在方法中使用多個return語句

回答

-1

是的你是正確的,你不能在一個方法中有多個return語句。如何將POJO返回給調用者方法並在那裏獲取值?

+0

如果仔細觀察代碼,OP *會創建一個POJO。從一個setter中返回一個不同的POJO沒有什麼意義。 –

1

不,您不能以這種方式返回多個值。

關鍵字return的工作方式是,它會立即將控制權返回給調用代碼,並使用返回的值作爲函數的值。它看到的第一個返回調用將會退出函數本身,因此任何後續的代碼都不會被執行。

通常,您不必永遠需要以這種方式從函數返回多個值。但是,如果要返回值列表,可以將它們打包到Container對象(例如java.util.Vector的對象)中,並返回矢量對象。但是,它在您列出的任何代碼中似乎不是必需的。

但是,在您發佈的代碼中,似乎不是從函數返回值,而是想讓您的類的實例變量由JOptionPane提示設置。然後,在完成所有這些分配後,只需在該功能末尾添加一條return聲明。請注意,如果您的函數聲明爲void(即,它不返回值),則最後不需要有return;行,因爲一旦它到達方法的末尾,它就會退出。有時有return;是有用的(例如,如果你有多個返回點),但這是另一個時間研究的話題。

+0

+1解釋退貨如何工作。在給定代碼的上下文中,使用Container看起來並不合適。 OP正在創建一個POJO。 –

+0

這是真的。我試圖用它作爲如何返回多個值的例子,但我同意在上面的代碼中,它不是必需的。我編輯了我的答案以反映這一點。 –

2

return語句的基礎知識是它使程序離開當前函數(子例程)並從調用該函數的位置(即返回地址)繼續。
當你輸入一個函數時,返回地址被保存在調用堆棧中,因此它很容易到達。

至於你的代碼,當你發出return聲明,然後另一個聲明,後者將不會被調用。
如果我沒有弄錯,它甚至不會在大多數編譯器上編譯。
因此,您需要做的是發出一個返回語句,它將所有字符串返回到一起。
這可以通過Java標準庫中提供的許多基本Data Structures來完成,如果您不想涉足該標準庫,您甚至可以將這些字符串附加到一個大字符串中,然後將其拆分。

但現在我建議閱讀一本基本的Java書籍/ tutorial,甚至是關於編程語言的基本書籍。
Goodluck!

Link to some basic Java Data structures

編輯
作爲代碼大師指出並是正確的,解決這個問題最好的辦法就是用POJO,你可以看到他的回答一個很好的解釋。

雖然讀一本書,在我看來,瞭解基本面擊敗了所有的技術解決方案,在這一點上

+0

+1解釋退貨是如何工作的。在給定代碼的上下文中,使用Container看起來並不合適。 OP正在創建一個POJO。 –

+0

你是對的,謝謝你,我會將你的評論添加到我的答案中,併爲你的輸入+1 – Yarneo

0

許多現代語言有優雅的能力返回多個值,但Java沒有。實際上,你必須選擇別的東西。從一切而非效率的角度來看,100%可接受的解決方案是返回一個新類的新對象,該新對象被設計用來保存一組返回值。即;

class TwoStrings {String name;字符串地址; ...}

並在你的代碼中返回(new TwoStrings(「foo」,「bar」));

另一個完全可以接受的選擇是重構您的接口,因此 很自然會一次返回一個值。如果你想要getXandY(),將它重構爲getX()和getY()

一個常用的選擇是讓容器的返回值爲被調用者的 的參數之一,而不是返回「name」和「地址「,爲功能 提供一個」人員「,它將加載名稱和地址(並且可能返回成功指示符)。

不太可接受的方式是使用非特定數組或向量來返回多個值

最不可接受的是返回一個值,並存儲其他值供 調用者使用「副作用返回」

3

仔細查看你的代碼後,我想澄清看起來有些誤解。首先,從我所看到的,你不需要從你的任何方法中返回多個值。實際上,以「set」開頭的方法名稱不應該返回任何內容。另一方面,爲了「設置」變量的值,它需要一個參數。例如

public void setNaam(String newNaam){ 
    naam = newNaam; 
} 

請注意,我不使用JOptionPane對話框來獲取名稱。在代碼中的這一點上,我們不關心價值從何而來。其他一些方法負責實際從用戶那裏獲取價值。該方法只是存儲該值以備後用。

此外,需要注意的是你有一個字段聲明爲

String spelersInfo; 

我相信getSpelersInfo()setSpelersInfo()應該利用這一點,這就是爲什麼我說你不需要從任一返回多個值方法。

最後,看起來您正在創建我們所說的POJO。請參閱此鏈接瞭解縮寫詞的含義。