2

私は大学の新入生で、最初のJavaプログラミングコースから始めています。教授は、USPSのデータベースをシミュレートするアプリケーションを作成するために私たちに課題を送ってくれました。

とにかく、プログラムで受信者情報(住所、名前、都市など)を1行ずつ要求するようになり、単純なJOptionPaneを使用してそれを行うことができました。問題は、現在Javaメソッドを使用しているため、returnステートメントの作成方法がわからないため、プログラムが受信者情報を使用して次のメソッドに進むことです。

private static String getString(String string) {
    // TODO Auto-generated method stub

    String nameString = JOptionPane.showInputDialog(null,
            "Recipients name:", "Certified Mail Receipt", 3);

    String streetAddressString = JOptionPane.showInputDialog(null,
            "Street, Apt. No. or P.O. Box No.:", "Certified Mail Receipt",
            3);

    String cityString = JOptionPane.showInputDialog(null,
            "City, State, Zip Code", "Certified Mail Receipt", 3);
    // return ?????????`
}

コンパイラーは1つのreturnステートメントのみを挿入させ、3つの質問のうち1つだけが次のメットフッドに送信されます。プログラムが同じ受信者に情報の質問を何度も繰り返すのをやめるように、returnステートメントで3つのことを取得する方法が必要だと思います。

それが助けになるなら、私はEclipseJavaコンパイラーを使用しています。ありがとう!

======================編集=========================== ===== @TerryLiは、クラスでエラーを見つけることで私を助けてくれました

private static String getString(String type) {
String result = JOptionPane.showInputDialog(null, 
        type, 
        "Certified Mail Receipt", 
        3);
return result;   

}

これが私がそれを機能させるために管理した方法です。@terryliと返信を手伝ってくれたすべての人にもう一度感謝します!

4

7 に答える 7

7

データを保持するラッパークラスを記述します。

public class SomeWrapper
{
    private String name;
    private String address;
    private String city;

    public SomeWrapper(String n, String a, String c)
    {
        name = n;
        address = a;
        city = c;
    }

    public String getAddress(){return address;}
    public String getName(){return name;}
    public String getCity(){return city;}
}

次に、次のように使用します。

private static String getData()
{
   // ...

   SomeWrapper w = new SomeWrapper(nameString, streetAddressString, cityString);

   return w;
}

次のように抽出します。

SomeWrapper w = getData();
String nameString = w.getName();
String streetAddressString = w.getAddress();
String cityString = w.getCity();
于 2013-02-28T19:58:49.730 に答える
1

このメソッドの外部で配列変数または静的変数を使用できます。メソッドは、プロンプトが表示された3つの文字列すべてを含む文字列の配列を簡単に返すことができます

于 2013-02-28T20:00:53.333 に答える
0

Javaでは、配列、ラッパークラス、または何らかの構造を使用しない限り、複数の値を返すことはできません。これらのアプローチは両方ともすでに説明されているので、読みやすくするためにいくつかの異なる方法に分割するという代替案を提案します。

private static String promptForString(String message, String title)
{
    return JOptionPane.showInputDialog(null,message,title,3);
}

private static String promptForName()
{
    return promptForString("Recipients name:","Certified Mail Receipt");
}

private static String promptForStreetAddress()
{
    return promptForString("Street, Apt. No. or P.O. Box No.:","Certified Mail Receipt");
}

private static String promptForCity()
{
    return promptForString("City, State, Zip Code","Certified Mail Receipt");
}

次に、呼び出し元のメソッドで単純に使用できます

String name = promptForName();
String streetAddress = promptForStreetAddress();
String city = promptForCity();

これには、フィールドをかなり簡単に追加したり、promptForStringメソッドを他の何かに使用したりできるという追加の利点があります。

于 2013-02-28T20:17:09.270 に答える
0

別の方法を提供させてください。

String splitter = "-.-";
return nameString+splitter+streetAddressString+splitter+cityString;

次のように戻り値を取得できます。

String returns = getString(...);
String nameString = returns.split(splitter)[0];
String streetAddressString = returns.split(splitter)[1];
String cityString = returns.split(splitter)[2];

また、メソッドのシグネチャを同じに保ちたい場合は、これが唯一の回避策になります。

編集

Javaを初めて使用する場合は、次のコードを試してください。

return nameString+"-.-"+streetAddressString+"-.-"+cityString;

splitter基本的に、私はあなたのためにそれを簡単にするためにグローバル変数を削除しました。

String nameString = returns.split("-.-")[0];
String streetAddressString = returns.split("-.-")[1];
String cityString = returns.split("-.-")[2];

更新

getString次のようにメソッドを変更するだけで済みます。

private static String getString(String type) {
    String result = JOptionPane.showInputDialog(null, 
            type, 
            "Certified Mail Receipt", 
            3);
    return result;   
}

これで問題が解決するはずです。お知らせ下さい。

Update2

private static void showReceipt(double postage, double certifiedFee,
        double restrictedFee, double returnReceiptFee, String nameString,
        String addressString, String cityString) {
    // TODO Auto-generated method stub
    DecimalFormat fmt = new DecimalFormat(" $0.00");
    double certifiedMailFee = 0;
    double restrictedDelivery = 0;
    String outputString = "U.S. POSTAL SERVICE\nCERTIFIED MAIL RECEIPT\n---------------------\nPostage" + 
            fmt.format(postage) + 
            "\nCertified Mail Fee" + fmt.format(certifiedMailFee) + 
            "\nRestricted Delivery Fee" + fmt.format(restrictedDelivery) + 
            "\nReturn Receipt Fee" + fmt.format(returnReceiptFee) + 
            "\nTotal Postage & Fees" + fmt.format(postage + certifiedMailFee + restrictedDelivery + returnReceiptFee) + 
            "\n----------------------------" + 
            "\nSend to:" + 
            "\n" + nameString + 
            "\n----------------------------" + 
            "\nStreet, Apt No., or PO Box No." + 
            "\n" + addressString + 
            "\n----------------------------" + 
            "\nCity, State, ZIP+4®" + 
            "\n" + cityString;

    JOptionPane.showMessageDialog(null, 
            outputString, 
            "Certified Mail Receipt", 
            1, 
            null);

}

うまくいけば、上記のコードに加えた変更に気付くでしょう。

于 2013-02-28T20:05:49.477 に答える
0

私の謙虚な意見では、後で文字列をどのように使用したいかに応じて、2つの明白なオプションがあります。私の見方では、すべての変数からすべての情報を返す連結文字列を返すことができます。これは、次のようになります。

/* The \n just puts each peace of info on a new line you could just do a 
" " instead or something. */
return nameString+"\n"+streetAddressString+"\n"+cityString;

または、特定の場所(インデックス)に各文字列を含むstringarrayを返すことができます。

String[] stringList = new String[3];

そして、それらを配列に読み込んで配列を返します(これを行う場合は、戻りタイプを変更することを忘れないでください)。

/* index in arrays start at 0 so its always 1 less than the size you make it 
(if you didnt know) */
stringList[0] = nameString;
stringList.... etc.

また、ゲッターは通常パブリッククラスであり、フィールド値をプライベートにして、ゲッターで取得するだけであることを知っておく必要があります。(標準的な慣行として、そしてとにかく私が知る限り)。それが役に立てば幸い。

編集:私の意見では、必要さえないときに静的変数を使用することは非常に悪い考えです。それなしで問題を解決できる場合は、代わりにそのようにしてください。

于 2013-02-28T20:10:56.070 に答える
0

ふたつのやり方。

  1. グローバル変数を使用する

    ****

    ****

****

private static String nameString, streetAddressString, cityString;
        private static String getString(String string) {
            // TODO Auto-generated method stub

            nameString = JOptionPane.showInputDialog(null,
                    "Recipients name:", "Certified Mail Receipt", 3);

            streetAddressString = JOptionPane.showInputDialog(null,
                    "Street, Apt. No. or P.O. Box No.:", "Certified Mail Receipt",
                    3);

            cityString = JOptionPane.showInputDialog(null,
                    "City, State, Zip Code", "Certified Mail Receipt", 3);
            //No need to return, they are available globally 
        }

****

****

****

または、メソッドパラメータとして渡します

****

private static String getString(String string) {
    // TODO Auto-generated method stub
    String nameString = JOptionPane.showInputDialog(null,
            "Recipients name:", "Certified Mail Receipt", 3);
    String streetAddressString = JOptionPane.showInputDialog(null,
            "Street, Apt. No. or P.O. Box No.:", "Certified Mail Receipt",
            3);
    String cityString = JOptionPane.showInputDialog(null,
            "City, State, Zip Code", "Certified Mail Receipt", 3);

stringMethod(nameString,streetAddressString,cityString);
}

****

于 2013-02-28T20:07:19.237 に答える
0

Javaプログラミング言語では、複数の変数を返すことはできません。ただし、オブジェクトを返すことはできます。最も正確には、オブジェクトへの参照を返すことができます。したがって、複数のものを返したい場合は、すべての要件に適合するデータ構造(クラス)を作成し、そのインスタンスを返すだけです。

例えば:

public class DataStruct{

    public DataStruct(String nameString, String streetAddressString, String cityString){
         this.nameString = nameString;
         this.streetAddressString = streetAddressString;
         this.cityString = cityString;
    }

    public String nameString;
    public String streetAddressString;
    public String cityString;
}

private static String getString(String string) {
// TODO Auto-generated method stub

String nameString = JOptionPane.showInputDialog(null,
        "Recipients name:", "Certified Mail Receipt", 3);

String streetAddressString = JOptionPane.showInputDialog(null,
        "Street, Apt. No. or P.O. Box No.:", "Certified Mail Receipt",
        3);

String cityString = JOptionPane.showInputDialog(null,
        "City, State, Zip Code", "Certified Mail Receipt", 3);
return new DataStruct(nameString,streetAddressString,cityString);
}
于 2013-02-28T20:07:33.330 に答える