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

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

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

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

解決済

【Java】Q.なぜvoidがダメなのか分かりません。

ZaigaKishitani
ZaigaKishitani

総合スコア1

Java

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

4回答

0評価

1クリップ

1044閲覧

投稿2022/05/24 04:34

編集2022/06/01 21:43

書籍「スッキリわかるJava入門第3版」の600ページの15章Javaを支えるクラスたちの練習問題15-2に以下の問題があります。

 ■問題文:フォルダ名が入っている変数folderとファイル名が入っている変数fileがあります。fileは必ず「readme.txt」のような形式をしてますが、folderは末尾に¥記号が付いている場合と付いていない場合の両方がありえます。たとえば、「c:¥javadev」や「c:
¥user¥」のどちらもfolderの値として考えられます。
folderとfileを連結して、「c:¥javadev¥readme.txt」のような完全なファイル名としての文字列を完成させるメソッドを作成してください。

模範解答(以下図1とす)が

public class Main { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ } public String concatPath(String folder,String file) { if(!folder.endsWith("¥¥")) { folder += "¥¥"; } return folder + file; } }

でした。しかし、String concatPathの部分はvoid concatPathでもいいように思えます。具体的には以下のようなコード(以下図2とす)です。

public class Main{ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ } pblic void concatPath() { String folder; String file; if(!folder.endsWith("¥¥")) { folder += "¥¥"; } System.out.println(folder + file); } }

eclipseで入力するとエラーの文章は出ませんが、図2の

if(!folder.endsWith("¥¥")) { folder += "¥¥"; } System.out.println(folder + file);

の「folder」と「 file」全ての部分の下に赤線が出てきて、それぞれにカーソルを合わせると、「ローカル変数folderが初期化されていない可能性があります」「ローカル変数fileが初期化されていない可能性があります」と出てきます。

Q.図1の

public String concatPath(String folder,String file) {


はいいのに、図2の

pblic void concatPath() { String folder; String file;


はダメなんでしょうか? 

 ちなみに、書籍「スッキリわかるJava入門第3版」の182Pで「メソッドとは」、200Pで「戻り値とは」などは既に学習しました。200Pではreturnの使い方も学びました。271P以降では「オブジェクト指向をはじめよう」も学習しました。グーグルで調べたり、書籍を読み返してもよくわかりません。
◆疑問1.私の予想としては、
■問題文中に「メソッドを作成してください」と記載があるので、mainメソッドでそれを呼び出すメソッドを作らないといけない
⇨だから、作成したメソッド、すなわち、concatPathメソッドには仮引数を作らないといけない
⇨仮引数は同じ型でないといけないからString型でないといけない

だから、模範解答の様になるんでしょうか?

◆疑問2.仮引数なしでもメソッドは作れるからreturnで返す必要はないのではないかと思うのですが違いますか? mainメソッドで呼び出しても、作成したメソッド、すなわち、concatPathメソッドで直接変数に代入すればいいと思うのですが違うんでしょうか?

長くなりましたが、ご指導ご回答よろしくお願い申し上げます。

追記:申し訳ありません。ご指摘いただいた箇所の訂正と理解等に時間がかかっています。申し訳ないです。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

BeatStar

2022/05/24 06:27

コードはMarkdownを使いましょう。 https://teratail.com/help/question-tips#questionTips35 を参考にしてやってみましょう。 というか、ご自身の質問にあるコードと回答者のコードを比較して違和感を持たないのでしょうか。 初回らしいので仕方ないことかもしれませんが、何度も質問している人もこの手のやり方をするのが目立ちます…
BeatStar

2022/05/24 06:41

質問は編集できるので編集してください。
BeatStar

2022/05/30 09:37

編集を確認しました。 惜しいっ… 質問本文をご自分で見てください。 ちょっとずれていますよね。 恐らく、余計な「`」が付与されている可能性がありますね。もしくは開始と終了のやつが合っていないか。とにかくもうちょっとですよ。
ZaigaKishitani

2022/05/31 08:14

編集が滞って申し訳ないです。 Markdownでの修正を再度行いました。すいません、質問文の編集と返信を同時に行なった方がいいと思ったのですが、teratailは複数回の返信が可能でしたでしょうか? 可能なのでしたらもっとこまめに返信した方がよかったです。その場合は重ねてお詫びいたします。  また、Markdownでソースコードとして修正した部分を取り消す場合は「```ここに言語を入力」の部分を消せば良いんでしょうか? そこを消したりして3度ほど修正してみたのでご確認いただければ幸いです。ご返信が難しけれお目を通していただくだけでも大丈夫です。申し訳ないです。
BeatStar

2022/05/31 08:26

返信そのものは回数制限はありません。(関係のない話をだらだらと続けるのはアレだと思いますが) MarkdownについてはOKです。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

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