前提・実現したいこと
Mainメソッドの変数mailを getDomainメソッドに対応させ、その中で@以降の文字列を抽出して戻り値としてMainメソッドに戻して表示させたい。
発生している問題・エラーメッセージ
Main.java:12: error: variable word might not have been initialized return word.substring(mail.indexOf("@")); ^ 1 error
該当のソースコード
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String mail = scan.next(); String mail2 = getDomain(mail); System.out.print(mail2); } static String getDomain(String mail){ String word; return word.substring(mail.indexOf("@")); } }
試したこと
おそらく変数mail.indexOfが機能してない気がするのですが、原因がわかりません。
また、getDomain(String mail)から()の中の文字を消してもエラーが出るのですが、public static 内で指定した変数は他のメソッドにも適応されるという認識だったのですが、間違いでしょうか。
もしよろしければ合わせてご教授お願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
> public static 内で指定した変数は他のメソッドにも適応されるという認識
"public static 内で指定した変数" とは, どの変数のことでしょう.
String mail = scan.next();のところです
mail 変数は「他のメソッドに適応」と(不可思議な)表現をされるような使い方をしているようには見えませんが...
勉強不足で申し訳ないのですが、publicで宣言した変数はほかのメソッドでも使用できると思っていたのですが、違うのでしょうか。
基本的には他のメソッド内には使用できないけど、publicのアクセス修飾子をつけたら使用できるように思っていました。
それはフィールドのことを仰っているのでしょうか.
public フィールドは他のクラス(のメソッド)でも使用可能ですが, クラス内のメソッドであれば public で無くとも使用できます. (static はまた別の意味です.)
ですが, mail 変数はフィールドではありません(mainメソッド内のローカル変数です)し, public も static も付いていません(ローカル変数には付けられません).
main メソッドが public static ですが, それはメソッドの属性であって, その内部のローカル変数には関係ありません.
逆に言えば, mail 変数をフィールド化すれば getDomain メソッドの引数として使わなくても getDomain メソッド内で使用できますが, 単に引数を省略するためだけにフィールドを使用することは, バグになり易かったりメンテナンス性が悪かったりしますので, 行われません.
ありがとうございます!非常にわかりやすいです!
プログラミングを勉強し始めて一週間なのですが、メソッドとフィールドとクラスがごっちゃになっていました。もう一度復習します!
回答1件
あなたの回答
tips
プレビュー