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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

解決済

3回答

4905閲覧

javaでSystem.out.println()の()内にメソッド名を入れることができない

bookcat100

総合スコア19

Java

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

0グッド

0クリップ

投稿2019/02/20 13:36

先日もこちらで質問をさせていただき、大変お世話になりました。
あれから勉強を重ね、自分でローカルクラスについてのプログラムを書いていたのですが
そこで自分では解決できない疑問が出てまいりましたので皆様のご意見をお聞きしたく質問させていただきます。

四苦八苦してコードを書いたところまではよかったのですが、出力をする段階で自力では解決できない
コンパイルエラーが出てしまいました。
詳しくは下のコードをご覧いただければと思います、なぜSystem.out.printlnの()にメソッドを入れて
出力をすることができないのでしょうか?
初歩的な質問で恐縮ですが、よろしくお願いします。

java

1public static void main(String[] args) { 2 3 Calculation cal = new Calculation(); 4          ↓ここでコンパイルエラーが出てしまいました。どうしてでしょうか? 5 System.out.println(cal.method()); 6 7 } 8} 9 10class Calculation{ 11 int x = 1; 12 public void method() { 13 System.out.println("計算を開始します"); 14 class SubCalculation{ 15 int y = 1; 16 17 void method() { 18 System.out.println("計算結果は"+ x+y); 19 } 20 } 21 SubCalculation subcal = new SubCalculation(); 22 subcal.method(); 23 } 24}

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2019/02/20 14:39

どんなコンパイルエラーが出たのか質問に書いてください。 思い込みで原因を特定してしまうのは良くないです。 コンパイルエラーが出たのであれば、まずはそのコンパイルエラーをしっかり読むようにしましょう。
jimbe

2019/02/20 15:45

ご質問のコードの前に ```java がありますが, 最期に ``` という一行が抜けていますので, コードが適切にフォーマットされておりません. 追加して頂けますか.
guest

回答3

0

Calculation#methodは返り値を返さないからです。
そもそもSystem.outの引数にせず、cal.method(); だけで目的に沿うのでは?


また、メソッドの返り値を引数に与えているだけなのに、
『()内にメソッド名を入れることができない』という表現になるのが不可解です。

methodがT型の値を返す場合、次の二つのコードの動作は同じ

Java

1System.out.println(method());

Java

1T value = method(); // Tはintかもしれないし、Stringかもしれない。 2System.out.println(value);

内部クラスよりも先に、より基礎的な要素であるメソッドを勉強しなおすことをお勧めします。

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
Java

投稿2019/02/20 13:40

編集2019/02/21 02:22
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwbQzhMkhhgEmhU

2019/02/20 19:06

疑問を抱えたまま先に進むとまずいので、簡単に説明すると、、、 System.out.println()の括弧の中に入れられるのは原則文字列だけなのです(本当は違いますが、とりあえずそう思っておいてください)。 System.out.println("ほげ"); // ←"ほげ"が文字列 System.out.println("ふが"); // ←"ふが"も文字列 System.out.println("ぴよ"); // ←"ぴよ"も文字列 基本ダブルクォートで囲まれたものが文字列です。 実行するとその文字列がコンソール画面に表示されます。 System.out.println()の括弧の中は文字列型の変数でも構いません。 String message = "ほげ"; // ←"ほげ"が文字列 System.out.println(message); // 文字列型の変数messageには"ほげ"が入っているので、"ほげ"が表示される この形式でもコンソール画面には「ほげ」が表示されます。 さらに、System.out.println()の括弧の中は、文字列型の戻り値を持つメソッドでもいいです。 [Calclation.java] ↓ public class Calculation { public static void main(String[] args) { Calculation cal = new Calculation(); System.out.println(cal.method()); // cal.method()からは常に"ほげ"が返ってくるので、コンソール画面に「ほげ」が表示される } public String method() { return "ほげ"; // このメソッドは呼ばれると常に"ほげ"という文字列を返します。 } } このプログラムをビルドして実行すると、コンソール画面に「ほげ」と表示されます。 皆さんが説明していることはこういうことです。 コメントなのでインデントが汚くてごめんなさい。
bookcat100

2019/02/21 12:03

お答えいただきありがとうございます。単純に私の理解不足のせいでした。
guest

0

ベストアンサー

またお会いしましたね~

(コード動くように順番やらなんやらいじっちゃったので見比べながらやってください)

Java

1class Calculation{ 2 int x = 1; 3 public void method1() { //method()だと名前が被ってエラーになるのでmethod1にしました 4 System.out.println("計算を開始します"); 5 SubCalculation subcal = new SubCalculation(); 6 subcal.method2( ); 7 } 8 9 class SubCalculation{ //SubCalculationクラスは method1()の外に出す(Calculationクラスの中) 10 int y = 1; 11 void method2() { 12 System.out.println("計算結果は"+ x+y); 13 } 14 } 15} 16 17 18 19public class Main { 20 public static void main(String[] args) { 21 22 Calculation cal = new Calculation(); 23 //System.out.println(cal.method()); //←System.out.println()しなくてもいい。 24 cal.method1(); //メソッド呼び出すだけでOK 25 } 26}

イメージ説明

↓ここでコンパイルエラーが出てしまいました。どうしてでしょうか?

System.out.println(cal.method());

どうしてでしょう、ではcal.method()でどのように書いているか見てみましょう。

Java

1public void method() {

前回、戻り値のお話をしたのは覚えていますよね。(覚えてくれていると信じています)

今回質問者さんが用意したメソッドの戻り値を見てみましょう

public void method()

voidですね。 voidってなんやねん。っていうと、『戻り値なし』ってことです。

ではもう一度エラーが出ていた箇所を見てみましょう。

Java

1System.out.println(cal.method());

・・・わかりましたか?
要するに、『戻り値なし』なのに『**何を出力したいの?**できないよそんなエスパー!』ってJavaに怒られているんです。

ここで私が変更(他にもしていますが)したコードを見てみましょう。

Java

1cal.method1(); //メソッド呼び出すだけでOK

System.out.println();がごっそり消えてメソッド呼び出しだけになりましたね。

でも画像を見ていただくとわかるように結果は出力されます。

なぜならメソッドの中で出力しているから。

ここまで書けばもう大丈夫ですよね。

投稿2019/02/21 00:48

azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

()内にメソッド名を入れることができない

のではなく、()内でメソッド名を書く方法がわからない、ってことでしょう。

文字列を返すメソッドを書けばいいのです

投稿2019/02/20 15:28

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bookcat100

2019/02/21 12:01

前回に引き続きまたご回答をいただきましてありがとうございます。 分かりやすい回答で本当に助かります。他の方も指摘されていましたが、そもそもローカルクラスを作成する前にまだまだメソッドや戻り値などについて学習不足だったようです... 1つずつしっかりと学習して行きたいと思います。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問