書籍「スッキリわかる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メソッドで直接変数に代入すればいいと思うのですが違うんでしょうか?
長くなりましたが、ご指導ご回答よろしくお願い申し上げます。
追記:申し訳ありません。ご指摘いただいた箇所の訂正と理解等に時間がかかっています。申し訳ないです。

回答4件
あなたの回答
tips
プレビュー