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 の学習を始めたばかりで、どこにも答えを見つけるのは難しいです。

4

5 に答える 5

3

あなたのコードを詳しく調べた後、いくつかの誤解と思われるものを解決したいと思います。まず第一に、私が見る限り、どのメソッドからも複数の値を返す必要はありません。実際、「set」という単語で始まるメソッド名は、何も返すべきではありません。一方、変数の値を「設定」するには、パラメーターを取る必要があります。例えば

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

名前を取得するために JOptionPane ダイアログを使用していないことに注意してください。コードのこの時点では、値がどこから来たかは気にしません。ユーザーから実際に値を取得するのは、別のメソッドです。このメソッドは、後で使用するために値を格納するだけです。

また、次のように宣言されたフィールドがあることに注意してください

String spelersInfo;

getSpelersInfo()and はこれを使用する必要があると考えてsetSpelersInfo()います。そのため、これらのメソッドのいずれからも複数の値を返す必要はないと主張しています。

最後に、 POJOと呼ばれるものを作成しているようです。頭字語の意味の詳細については、このリンクを参照してください。

于 2012-09-19T19:05:29.280 に答える
2

ステートメントの基本はreturn、プログラムが現在の関数 (サブルーチン) を離れ、関数が呼び出された場所 (戻りアドレス) から再開することです。
関数を入力すると、戻りアドレスがコールスタックに保存されるため、簡単に到達できます。

コードに関しては、ステートメントを発行してreturnから別のステートメントを発行すると、後者は呼び出されません。
私が間違っていなければ、ほとんどのコンパイラでコンパイルさえされません。
したがって、すべての文字列をまとめて返す return ステートメントを発行する必要があります。
これは、Java 標準ライブラリで利用可能な多くの基本的なデータ構造で行うことができます。それに関与したくない場合は、文字列を 1 つの大きな文字列に追加してから分割することもできます。

しかし、今のところ私が提案するのは、基本的なJavaの本/チュートリアル、またはプログラミング言語に関する基本的な本を読むことです.
幸運を!

いくつかの基本的な Java データ構造へのリンク

編集
Code-Guru が指摘し、正しいように、この問題にアプローチする最良の方法はPOJOを使用することです。彼の回答に素晴らしい説明があります。

私の意見では、本を読んで基本を理解することは、現時点ではすべての技術的解決策よりも優れています

于 2012-09-19T18:50:24.633 に答える
1

いいえ、そのように複数の値を返すことはできません。

キーワードが機能する方法はreturn、返された値を関数の値として使用して、呼び出し元のコードにすぐに制御を戻すことです。最初の return 呼び出しは関数自体を終了するため、後続のコードは実行されません。

一般に、そのような方法で関数から複数の値を返す必要はありません。ただし、値のリストを返したい場合は、値を Container オブジェクト ( のオブジェクトなどjava.util.Vector) にパックして、ベクトル オブジェクトを返すことができます。ただし、リストしたコードのいずれにも必要ではないようです。

ただし、投稿したコードでは、関数から値を返す代わりに、クラスのインスタンス変数をJOptionPaneプロンプトで設定したいようです。return次に、これらの割り当てがすべて完了すると、関数の最後に単一のステートメントがあります。関数が次のように宣言されているvoid(つまり、値を返さない) 場合はreturn;、メソッドの最後に到達すると終了するため、最後に行を追加する必要はありません。持つことreturn;が役立つ場合もありますが (複数のリターン ポイントがある場合など)、それは別の機会に検討するトピックです。

于 2012-09-19T18:48:07.037 に答える
0

多くの最新の言語には、複数の値を返す洗練された機能がありますが、java にはありません。実際問題として、他のものを選択する必要があります。効率以外のすべての観点から 100% 受け入れられる解決策は、戻り値のセットを保持するように設計された新しいクラスの新しいオブジェクトを返すことです。すなわち;

クラス TwoStrings { 文字列名; 文字列アドレス。... }

コード内で return(new TwoStrings("foo","bar"));

もう 1 つの完全に受け入れられる選択肢は、一度に 1 つずつ値を返すことが自然になるように、インターフェイスをリファクタリングすることです。「getXandY()」が必要な場合は、getX() および getY() としてリファクタリングします

頻繁に選択されるのは、戻り値のコンテナーを呼び出し先のパラメーターの 1 つにすることです。「名前」と「住所」を返す代わりに、関数に「人」を指定して、名前と住所をロードします (そして、おそらく成功のインジケーターを返します)。

あまり受け入れられない方法は、非特定の配列またはベクトルを使用して複数の値を返すことです

最も受け入れがたいのは、1 つの値を返し、呼び出し元が使用する他の値を「副作用による戻り」のために隠しておくことです。

于 2012-09-19T19:03:52.287 に答える
-1

はい、正解です。メソッドに複数の return ステートメントを含めることはできません。POJO を呼び出し元のメソッドに戻し、そこで値を取得するのはどうですか?

于 2012-09-19T18:46:54.167 に答える