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

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

ただいまの
回答率

90.84%

  • Java

    12845questions

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

ポーカープログラムでなぜ動作しているか不明なメソッド(toString())がある

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 210

dandai

score 2

カードを定義して5枚DRAW、それを表示するというところまでを作ったのですが、数値→文字列変換を他サイトで参考にして実装したところ分からない部分が出てきてしまいました。
クラスCard内のtoString()メソッドが参考にした部分で、数値で定義したマークを文字に置き換え、数字を付けてリターン、というメソッドだと思うのですが、これはどこかで呼び出さないと実行されないのではないでしょうか…?

なぜこのソースだけでコンソールに変換済みの文字が返ってくるのかわかりません。ご教示お願いします。

import java.util.Random;

public class Poker {

    public static void main(String[] args) {

        Draw draw = new Draw();
        Card[] cards = new Card[5];
        for(int i = 0; i < cards.length; i++) {
            cards[i] = draw.draw(); //ここと
      //ここだけで、toString()を呼び出していないのに文字に変換されて表示されるのかわからない
            System.out.print(cards[i]); 
        }
    }
}
class Card{
    int suit;
    int number ;

    public Card(int suit, int number) {
        this.suit = suit;
        this.number = number;
    }

    public int getSuit() {
        return suit;
    }
    public int getNumber() {
        return number;
    }

    public String toString() {
        String[] name = {"ハート","ダイヤ","スペード","クラブ"};
        return name[suit]+number;
    }
}
class Draw{
    Random rd = new Random();

    public Card draw() {
        int s = rd.nextInt(4);
        int n = rd.nextInt(13);

        return new Card(s,n);
    }
}
クラブ2ハート1スペード10クラブ5スペード2
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+3

System.out.printlnしたときに、内部的に呼び出されます。

public void println(Object x)

Objectを出力して、行を終了します。このメソッドは最初にString.valueOf(x)を呼び出して出力されるオブジェクトの文字列値を取得してから、print(String)、そしてprintln()を呼び出すのと同じように動作します。

引用元: Java API仕様 - PrintStream - println(Object) 、太字は引用者

public static String valueOf(Object obj)

引数がnullの場合は"null"に等しい文字列。それ以外の場合はobj.toString()の値が返される

引用元: Java API仕様 - String - valueOf(Object) 、太字は引用者

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/05/02 12:15

    ありがとうございます。print()メソッドが元々呼ぶ仕様になっていて、toString()はObjectクラスのメソッドだから、自動的にオーバーライドして再定義してる、という認識であっていますか?

    キャンセル

  • 2018/05/02 12:17

    全てのクラスはObjectクラスを継承していますから、Card#toStringがObject#toStringをオーバーライドしている、ということです。

    キャンセル

  • 2018/05/02 12:20 編集

    たぶんdandaiさんの認識は合ってます。
    個人的に『自動的』ってイメージではなかったのでちょっと言い換えただけで。

    キャンセル

  • 2018/05/02 13:30

    ありがとうございました!

    キャンセル

+3

System.out.print(Object)自体が、間接的にCard.toStringを呼んでいます(Java6のリファレンス)。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/05/02 13:30

    ありがとうございました!

    キャンセル

+1

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    明解Java入門編演習9−3

    この演習はDayクラスを使わずに行う演習なのでしょうか? Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。 また、もしDayクラスを

  • 受付中

    ループ化の方法

    public class Gohkaku {     public static void main(String[] args){         int math = ne

  • 解決済

    乱数の扱い(複数のクラス間で使用したい場合)

    java初心者です.乱数について質問いたします. 現在,javaで乱数を使うシミュレータを作成しています.結果を分析する際に再現性が必要なため, 1回のシミュレーションごと

  • 解決済

    javaで作れる学習プログラムってどのようなものが作れますか

    意図 javaを使って学習プログラムを作成してほしいといわれました。 しかし、イメージがわきません。 どんなものが作れるのでしょうか

  • 受付中

    java 進数

    javaです 「数」を表すNumberクラスを考える。Numberクラスを基底クラスとして定義し、整数に対し2進数、8進数、10進数、16進数の文字列を返すメソッドをもつ派生

  • 受付中

    ジャンケンゲーム

    ジャンケンゲームを作ってます。 <ルール> コンピュータに3回負けたらゲーム終了! 負けるまでゲームは続く! 数字を入力するとループが止まりません。 あと、winlo

  • 解決済

    同一クラス内でのメソッドの使い方?

    例が雑で申し訳ないのですが「☚この部分」のat()としたいのですがどうすればいいかわかりません。 import java.util.Random; public class

  • 解決済

    javaでブラックジャックを作っています。柄なしです

    javaでブラックジャックを作っています。ゲーム終了時にお互いの手札の合計と勝敗値を表示するコードを描きたいです /* * To change this license he

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

  • Java

    12845questions

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