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

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

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

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

Q&A

解決済

3回答

2617閲覧

メソッド内でキーボード入力から任意で作成した名前をmainメソッドで使用したい。

tomox

総合スコア12

Java

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

0グッド

1クリップ

投稿2019/08/01 04:50

前提・実現したいこと

・メソッド内で作成した文字をmainメソッドで使用したい。
・入力の修正や、不備があった場合には繰り返し入力を促すようにしたいです。

javaの勉強を始めたばかりの初心者です。
メソッド内でキーボード入力から任意で作成した名前を、
mainメソッドで使えるようにしたいのですが方法がわかりません。

どのような記述をプラスすれば行えるかご指導お願いします。

発生している問題・エラーメッセージ

tr10.java:11: エラー: シンボルを見つけられません put("ここで決めた名前を表示したい" + name + "ですね"); ^ シンボル: 変数 name 場所: クラス tr10 エラー1個

該当のソースコード

public class tr10 { public static void main(String[] args) { put("名前入力の練習を開始します"); put("あなたの名前を入力してください"); nameans(); put("ここで決めた名前を表示したい" + name + "ですね"); } public static void nameans(){ String name = new java.util.Scanner(System.in).nextLine(); put("あなたの名前は【 "+ name + " 】ですね"); put("はい【1】"); put("修正【2】"); int ans = new java.util.Scanner(System.in).nextInt(); if(ans == 1){ put(name + "は入力に成功!"); }else{ put("もう一度名前を入力をしてください"); nameans(); } } public static void put(String str){ System.out.println(str); } }

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

恐らく質問者さんは「戻り値」というものを知らないのではないでしょうか。

Java

1public static void main(String[] args) 2 { 3 put("名前入力の練習を開始します"); 4 put("あなたの名前を入力してください"); 5 6 String test = nameans(); // 結果を受け取る 7 8 put("ここで決めた名前を表示したい" + test + "ですね"); 9 } 10 11 public static String nameans(){ 12 13 String name = new java.util.Scanner(System.in).nextLine(); 14 put("あなたの名前は【 "+ name + " 】ですね"); 15 return name; // 結果を返す 16 }

質問者さんのメソッドを見てみると、

Java

1public static void nameans()

と書いてあります。

この 「void」は 戻り値なし を表しています。

そもそも 戻り値ってなんやねん。 っていうと、メソッドを呼んだところが求めている結果のことです。

今回で言えば 名前 が戻り値になります。

私が書いたメソッドを見てみると

Java

1 public static String nameans(){

さきほど void と書いてあったところに String と書きました。

これでメソッドを呼んだところに String型 の結果を返してあげますよーと教えてあげています。

そして肝心の戻り値はどこで書いているかというとここです。

Java

1return name;

return 戻り値; と書くと、メソッドを呼んでいるところに結果を渡すことができます。

これで名前を受け取ることができると思います。

引数と戻り値については下記サイトがわかりやすいのでご一読ください。

https://nobuo-create.net/java-beginner-13/

投稿2019/08/01 05:02

編集2019/08/01 05:05
azuapricot

総合スコア2341

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

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

m.ts10806

2019/08/01 05:12

プロパティにセットすればvoidのままでもいいかなと思って回答したんですが、実はあまり一般的ではない・・・?
azuapricot

2019/08/01 05:16

いや、この場合プロパティでも全然問題ないと思います◎(むしろそっちのほうがよさそう) でも勉強したばかりの初心者のときってプロパティとかよくわからないし(私がわからなかった) とりあえずメソッドの使い方覚えるところかなと思ったので...!
m.ts10806

2019/08/01 05:18

確かにそうですね。 勢いあまってコードも書いてしまったのですけど、 後者の return nameans(); とか「再帰」とかまだ早かったですね。反省;
azuapricot

2019/08/01 05:23

再帰はもっと後でも良さそうですよね・・・できれば便利ですが最初はもっと単純で良さそう◎ 質問者さんが挑戦したければきっと再帰処理も調べて挑戦するでしょうし、反省するほどではないかと? 質問者さん以外にも今後検索でこの質問にたどり着く人がいるかもしれませんし!
m.ts10806

2019/08/01 05:25

そうですね。私はEclipseさんの警告に従ってやってて気づいただけなので、 そのあたりはうまいこと今後に活かしてもらいたいですね。
tomox

2019/08/01 06:05

回答ありがとうございます!無事に解決できました。 おそらく「return」を使うのだろうと思って色々試していましたが、ぐちゃぐちゃになり 理解ができなくなっていました。 ずーっと悩んでいたのでとても助かりました(^^)/ありがとうございます。
azuapricot

2019/08/01 06:34

最初につまりやすいポイントの一つなので理解できたならなによりです。 頑張って下さい~!
guest

0

エラーの該当箇所にある name という変数は、
nameansメソッド内でのみ使える変数になっています。
mainメソッド内で定義された変数ではないため
「シンボルを見つけられません」(=変数定義が見つからない)
と言われてしまいます。

nameansメソッドの戻り値としてnameをreturnし、
mainメソッド内で受け取るようにしましょう。

// mainメソッド String name = nameans(); // 戻り値を受け取る put("ここで決めた名前を表示したい" + name + "ですね"); // nameansメソッドの戻り値が表示される
// nameansメソッド public static String nameans() { // 戻り値の型を変更 ... if(ans == 1) { put(name + "は入力に成功!"); return name; // 追加 }else { ... } }

投稿2019/08/01 05:05

moootoko

総合スコア22

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

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

tomox

2019/08/01 06:06

回答ありがとうございます。 無事に解決できました!!
moootoko

2019/08/01 06:20

Javaはいろんなことができて楽しいので、がんばってください!!
guest

0

プロパティに持つ。

java

1 static String name = ""; 2 3 public static void main(String[] args) { 4 put("名前入力の練習を開始します"); 5 put("あなたの名前を入力してください"); 6 7 nameans(); 8 9 put("ここで決めた名前を表示したい" + name + "ですね"); 10 } 11 12 public static void nameans() { 13 14 name = new java.util.Scanner(System.in).nextLine(); 15 put("あなたの名前は【 " + name + " 】ですね"); 16 put("はい【1】"); 17 put("修正【2】"); 18 int ans = new java.util.Scanner(System.in).nextInt(); 19 20 if (ans == 1) { 21 put(name + "は入力に成功!"); 22 return; 23 }//「はい」選択で終わるのでelseなしで空returnを使うとスッキリします。 24 put("もう一度名前を入力をしてください"); 25 nameans(); 26 } 27 28 public static void put(String str) { 29 System.out.println(str); 30 }

または
returnしてmainで受け取る。

java

1 public static void main(String[] args) { 2 put("名前入力の練習を開始します"); 3 put("あなたの名前を入力してください"); 4 5 String name = nameans(); 6 7 put("ここで決めた名前を表示したい" + name + "ですね"); 8 } 9 10 public static String nameans() { 11 12 String name = new java.util.Scanner(System.in).nextLine(); 13 put("あなたの名前は【 " + name + " 】ですね"); 14 put("はい【1】"); 15 put("修正【2】"); 16 int ans = new java.util.Scanner(System.in).nextInt(); 17 18 if (ans == 1) { 19 put(name + "は入力に成功!"); 20 return name; 21 }//「はいを選ぶまで実行」なので、関数そのままreturnする”再起処理”にすることが可能です。 22 put("もう一度名前を入力をしてください"); 23 return nameans(); 24 } 25 26 public static void put(String str) { 27 System.out.println(str); 28 }

投稿2019/08/01 04:58

編集2019/08/01 05:29
m.ts10806

総合スコア80850

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

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

m.ts10806

2019/08/01 05:06 編集

というか幾つか警告出てますね。 IDE使って実行前にキャッチしてください。 ※今回のエラーも実行前にとれます
tomox

2019/08/01 06:07

回答ありがとうございます。 まだまだ勉強不足で理解できないことがほとんどですが、 今後の参考にさせて頂きます!
m.ts10806

2019/08/01 06:09

少しだけコメントを調整しています。 今回の私のコードは同じ挙動を維持したままコードの最適化や見通しをよくする「リファクタリング」という行為に近いものです。 そのうち分かるようになると思うので、頭の片隅に残しておいてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問