質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Java

    14067questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • 配列

    534questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

フィールド変数を使用せずにクラス型配列の中身を表示

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,863

touch

score 35

/*
 * 引数、パラメータ、戻り値を使用して
 * SubTest19クラスでフィールド変数を使用しないよう、
 * 修正して下さい。
 * 
 * 
 * また、SubTest19クラスのput()で行っている出力はfor文を使用する事。
 * 
 */


class Test19 {

    public static void main(String[] args) {

        SubTest19 st19 = new SubTest19();

        st19.set();

        st19.put();

    }
}


class SubTest19 {

    private Test19data t19d[] = null;

    protected void set(){
        t19d = new Test19data[3];
        t19d[0] = new Test19data();
        t19d[1] = new Test19data();
        t19d[2] = new Test19data();

        t19d[0].px = "K-0963";
        t19d[0].ct = 23;

        t19d[1].px = "T-523363";
        t19d[1].ct = 517;

        t19d[2].px = "J-97553";
        t19d[2].ct = 5;

    }

    protected void put(){
        System.out.println(t19d[0].px);
        System.out.println(t19d[0].ct);

        System.out.println(t19d[1].px);
        System.out.println(t19d[1].ct);

        System.out.println(t19d[2].px);
        System.out.println(t19d[2].ct);

    }

}


class Test19data{
    public String px;
    public int ct;

    public Test19data(){
        px = "";
        ct = 0;
    }
}


フィールド変数を使用しないというのは、いわゆるprivate Test19data t19d[] = null;や、public String px;、public int ct;というコードを使わずに、引数、パラメータ、戻り値を使用してということだと思います。

ご回答よろしくお願いします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

check解決した方法

0

class Test19 {

    public static void main(String[] args) {

        SubTest19 st19 = new SubTest19();

        Test19data[] t19d = st19.set();

        st19.put(t19d);

    }
}


class SubTest19 {

    protected Test19data[] set(){
        Test19data t19d[] = null;
        t19d = new Test19data[3];
        t19d[0] = new Test19data("K-0963", 23);
        t19d[1] = new Test19data("T-523363", 517);
        t19d[2] = new Test19data("J-97553", 5);

        return t19d;

    }

    protected void put(Test19data[] t19d){
        //
        for( int i = 0; i < t19d.length; i++ ){
            System.out.println(t19d[i].px);
            System.out.println(t19d[i].ct);
        }
    }

}


class Test19data{

    public String px;
    public int ct;

    public Test19data(String px, int ct){
        this.px = px;
        this.ct = ct;
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Javaではこのような場合はtoStringメソッドをオーバーライドします。
後はTest19dataのオブジェクトをそのままprintすればOKです。

toStringはEclipseなどのIDEを使えば生成機能で作ることができます。

class Test19data{
    private String px;
    private int ct;
    //コンストラクタ
    public Test19data(String px, int ct){
        this.px = px;
        this.ct = ct;
    }

    @Override
    public String toString() {
        return "Test19data [px=" + px + ", ct=" + ct + "]";
    }

}

// System.out.println(t19d[i]); // => Test19data [px=, ct=0]

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/08 20:15

    早速ご回答頂きありがとうございます。
    toStringメソッドをオーバーライドする方法があったのですね。
    ちなみにフィールド変数を使用せずにエラーなく表示させることは可能でしょうか?

    キャンセル

  • 2015/03/08 21:34

    フィールド変数を使わずにというのは、フィールド変数なしで、ということですか? だとしたら無理だと思います。
    なぜフィールド変数を使わずに、なのかが良く分かりませんので、その辺をご説明いただけるともうすこし的確にお答えできるかもしれません。
    もしかして、タプルの配列を実現したいということでしょうか?

    キャンセル

  • 2015/03/08 21:47

    言葉足らずで申し訳ないです。
    private String px;やprivate int ct;といったフィールド変数を使わずにということでした。
    これは学校の課題で、そのような指示をされています。これから編集で原型を載せます。

    キャンセル

0

引数、パラメータ、戻り値を使用して、フィールド変数を使用せずに
Test19data型配列の中身をfor文で出力したいです。 
「フィールド変数を使用せずに」の部分が意味不明ですが、(仰っている内容を直接解釈すると)それは実装不可能です。

というより、フィールド変数の役割/目的と、コンストラクタとの関係を勘違いされているように見えます。コンストラクタは、フィールド変数を初期化するために存在します。質問文にあるコードは、「オブジェクトnew時に与えられた値を受け取ったパラメータ変数pxctの中身を破棄し、""0を再代入しているだけ(そしてコンストラクタを抜けるときに全ての値が破棄される)」という、結果的に何もしていないコードになっています。

class Test19data{
  public Test19data(String px, int ct){
    px = "";
    ct = 0;
  }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/08 22:00

    ご回答頂きありがとうございます。
    まだ初心者ゆえご指摘の箇所含め勉強中でした。
    今後の参考にさせていただきます。

    キャンセル

0

「フィールド変数」というのが何を指しているのかがよくわかりませんが,
確かにmainメソッドが無駄に冗長な気がします.
以下推測で回答するので間違っていたらご指摘願います.

SubTest19のメンバとしてTest19data[]を定義します.
SubTest19のコンストラクタでTest19data[]を初期化します.
そしてSubTest19でtoString()をオーバーライドします.
class SubTest19 { 

    private Test19data t19d[];

    public SubTest19(){ 

        //配列の初期化 
        t19d = new Test19data[3]; 

         //インスタンス生成および情報の受け渡し 
        t19d[0] = new Test19data("K-0963", 23); 

        t19d[1] = new Test19data("T-523363", 517); 

        t19d[2] = new Test19data("J-97553", 5);  

    } 

    public String toString(){ 

        String str = "";
        //出力 
        for( int i = 0; i < t19d.length; i++ ){ 
            str += t19d[i].toString();    //argiusさんのtoStringをそのまま使うとします.
            if(i != t19d.length - 1)
                str += \n;                //データの最後でなければ改行を入れる
        } 
        return str;
    } 

} 
こうするとmainメソッドにおいて,
class Test19 { 
    public static void main(String[] args){
        System.out.println(new SubTest19());
    }
}
このように,フィールド変数を使わずに内容を出力できます.

あるいは,Test19dataにputメソッドを次のようにして,
public void put(){
    for( int i = 0; i < t19d.length; i++ ){ 
        System.out.println(t19d[i]);
    }
}
mainメソッドの中で
public static void main(String[] args){
    new SubTest19().put();
}
としても出力できると思います.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/08 22:06

    ご回答頂きありがとうございます。
    確かにこれならフィールド変数を使わずに内容を出力できますね。
    勉強になります。

    キャンセル

  • 2015/03/08 22:10

    いや,質問の意味が分からない時点で回答したのでこうしましたが,
    そういう質問であればこの回答は不適ですね(SubTest19がフィールド変数を持っている)

    キャンセル

0

「SubTest19クラスでフィールド変数を使用しない」ということなので,
SubTest19の中で使う変数が全部ローカル変数になるように改変すればいいわけです.
Test19dataにはそんな指定は無いですし,そもそもこの場合
Test19dataにはフィールド変数がなければ使い物になりません.
Test19dataのコンストラクタはargiusさんのがそのまま使えます.

学校の課題ということなので完全な答えは出さずに,ここでは手がかりを示すにとどめます.

最終的にSubTest19#putメソッドでTest19dataの中身を表示することになるので,
putメソッドの中でTest19data[]を取得する必要があるわけです.
一方で,現在setメソッドではフィールド変数を操作しています.
ここで行った結果を,ローカル変数のみを用いて他でも使える様にするためには・・・?

さあ,お考えください.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/08 22:21

    ご配慮ありがとうございます。
    ヒントを参考にもう少し自分で考えてみます。

    キャンセル

  • 2015/03/08 22:31

    ちょっと編集履歴から先ほど載せていたコードを見ていたのですが,
    あれが割と課題の要求に沿っていたコードだと思ったのですが(引数,パラメータ,戻り値を利用している)
    何が疑問,もしくは不満だったのでしょうか?

    キャンセル

  • 2015/03/08 22:38

    課題の原型を載せないと、皆様にフィールド変数を使わないという課題の意図が伝わらないと思い、すっきりさせる意味でも消してしまいました。どちらも最初から載せておくべきでしたね。

    キャンセル

  • 2015/03/08 22:41

    そういうことじゃなくて,質問の時点で載せていたコードで
    課題が要求していた仕様はほぼ満たしていたと思うんです.
    私は「フィールド変数を使わない」というのがあやふやで混乱していましたが.
    そういうことなら,なぜ質問したのか,何が疑問で質問したのかがわからないのです.

    キャンセル

  • 2015/03/08 22:49

    あともう少しという所まで来ているのかなと思っていたのですが、あのままだとTest19dataクラスのところでどうしてもフィールド変数を使わないと回答にたどりつかなくて、何か違ったアプローチはないかと質問させていただきました。

    キャンセル

  • 2015/03/08 23:13

    なるほど.ですがあなたの出された課題が正しくここに表示されているのであれば,
    「SubTest19でフィールド変数を使わない」としか書かれていません.
    おそらくこれは「SubTest19クラスがフィールド変数を持たない」ということでしょう.
    先生が一般的なプログラムを意識しているのであれば,課題のコードのputメソッドで登場する"オブジェクト.変数名"を使わない,ということも入っていると思われます.
    他のクラスでフィールド変数を持つことに関しては制限がない,と私は読み取りますね.
    完全にフィールド変数を封じられたらTest19dataは本当に使い物にならなくなりますし.

    キャンセル

  • 2015/03/08 23:47

    よく問題を読めば、 Test19dataクラス内では変数に関して制限が無いですね。
    なら最初の方針で合ってたということですね・・
    すいません、お騒がせしました。これからは問題をよく読みます。

    キャンセル

  • 2015/03/08 23:50

    ついでに,私の最初の回答に付いているベストアンサーを外していただけるとありがたいです.
    質問に沿わない回答がベストアンサーになっているのは私としても本意ではないので.

    キャンセル

関連した質問

  • 解決済

    【janken.RandomTacitcs cannot be resolved to a type...

    以下コードの下から4行目の部分で janken.RandomTacitcs cannot be resolved to a type とエラーが出ます。 どのように修正すればいいで

  • 受付中

    JAVAに関する質問

    JAVAに関する質問です。 JAVAで以下のプログラムを作成しました。 import java.util.Scanner;  public class Sample {  /

  • 解決済

    単語ごとの出現回数を出現順に表示するには、HashMapとArrayListが必要か

    単語ごとの出現回数を出現順に表示するには、HashMapとArryaListが必要でしょうか。 下記の例よりももっとスマートかつコード量が少なく使用するメモリの量が少ない方法がある

  • 解決済

    java 日付の取得と変更について

    javaの日付の取得と変更に関するコードについて質問です 参考書のとおりに、下記のコードを書いて実行してみたのですが 実行してみても、現在の日付から5日後の日付が出力されず、現在

  • 解決済

    javaでEclipseのプログラム

    クラス内変数について: 以下の条件を満たすプログラムについて、 作成例を示してください。 インスタンス生成時点の現在時刻を表示する機能をもつ シングルトランスを作成する。 2度目

  • 受付中

    private static final フィールドの値を変更してテストしたい

    例えば、実行時にstatic finalフィールドの値が決まるようなWordクラスがあったとします。 WordTestでは2つのインスタンスを生成しますが、w2の生成時には既に初

  • 解決済

    java カプセル化について解説していただけないでしょうか

    javaのカプセル化について勉強をしています。 以下の仕様で2.部分のコードを自身で記述するような問いなのですが、なぜこの仕様で2.のようなコードになるのかが理解ができないので、

  • 解決済

    Java if文を多様しないで組みたい

    現在Javaにて名前と科目を入力したら登録した点数がでるプログラムを組んでいます。 エラーは無いのですがif文を多様してしまっているのでif文をあまり使わずに作りたいです。

同じタグがついた質問を見る

  • Java

    14067questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • 配列

    534questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。