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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Java

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

Q&A

解決済

2回答

1381閲覧

forの繰り返しが分かりません ""の役割を教えて下さい

退会済みユーザー

退会済みユーザー

総合スコア0

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Java

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

0グッド

0クリップ

投稿2020/06/29 13:19

前提・実現したいこと

プログラミングを学習して2日目です。初心者ですが宜しくお願い致します。
九九の段をランダムで作るというプログラムなのですが、5行目のString question="";がどういった役割を果たしているのか分かりません。これを消去したまま実行するとエラーになってしまいます。
試しにString question="";を残し、7行目の2個目のquestionを消去した状態で実行をすると
[36]
4 
となり
本来欲しい答えである
[0][4][8][12][16][20][24][28][32][36]
4
に辿り着きません。
""があるかないかで大きく変わってしまうのですが、どういう役割を持っているのでしょうか?
宜しくお願い致します。

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

↓5行目のString question="";を消去した時

question=question+"["+answer*i+"]"; ^ symbol: variable question location: class Main Main.java:9: error: cannot find symbol question=question+"["+answer*i+"]"; ^ symbol: variable question location: class Main Main.java:13: error: cannot find symbol System.out.println(question); ^ symbol: variable question location: class Main 3 errors

該当のソースコード

public class Main { public static void main(String[] args) { Random rnd=new Random(); int answer=rnd.nextInt(10); String question=""; for (int i=0; i<=9;i++){ question=question+"["+answer*i+"]"; } System.out.println(question); System.out.println(answer); } }

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

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

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

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

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

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

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

swordone

2020/06/29 13:48

それ、行ごと消してませんか?
退会済みユーザー

退会済みユーザー

2020/06/29 14:05

行というのは5行目でしょうか? 5行目は削除いたしました
guest

回答2

0

String question=""; の役割について

5行目のString question="";がどういった役割を果たしているのか分かりません。
""があるかないかで大きく変わってしまうのですが、どういう役割を持っているのでしょうか?

この行の主な役割は、変数を宣言することです
Java では変数を宣言しないと変数の利用を始めることができません

この後で question という変数を使うために、
文字列型で変数を宣言し、空の文字列 "" を代入しています

ループ内の 2 個目の question の役割について

試しにString question="";を残し、7行目の2個目のquestionを消去した状態で実行をすると
[36]
4 
となり
本来欲しい答えである
[0][4][8][12][16][20][24][28][32][36]
4
に辿り着きません。

この書き方は**文字列を「追記」**するときによく使われます

ここでは、「answer * i の値を鉤括弧[]で囲った文字列」を
question に連結して question に代入しなおしています

実験

わかりやすいように、question の値がどのように変化するか
System.out.println("question = " + question); というコードを追記して実行してみましょう:

java

1import java.util.Random; 2public class Main { 3 public static void main(String[] args) { 4 Random rnd=new Random(); 5 int answer=rnd.nextInt(10); 6 String question=""; 7 System.out.println("question = " + question); 8 for (int i=0; i<=9;i++){ 9 question=question+"["+answer*i+"]"; 10 System.out.println("question = " + question); 11 } 12 13 System.out.println(question); 14 System.out.println(answer); 15 } 16}

実行結果:

console

1root@3295d4b172a0:/workspace# javac Main.java 2root@3295d4b172a0:/workspace# java Main 3question = 4question = [0] 5question = [0][9] 6question = [0][9][18] 7question = [0][9][18][27] 8question = [0][9][18][27][36] 9question = [0][9][18][27][36][45] 10question = [0][9][18][27][36][45][54] 11question = [0][9][18][27][36][45][54][63] 12question = [0][9][18][27][36][45][54][63][72] 13question = [0][9][18][27][36][45][54][63][72][81] 14[0][9][18][27][36][45][54][63][72][81] 159

question に 「answer * i の値を鉤括弧[]で囲った文字列」が追記されていることがわかります

投稿2020/06/29 13:58

y_shinoda

総合スコア3272

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

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

退会済みユーザー

退会済みユーザー

2020/06/29 23:33

実験の例が大変分かりやすいです! ありがとうございます。
guest

0

ベストアンサー

String question="";

初期値として空文字列を代入してるだけです
これがない場合、この変数にはなにが入るかわかるでしょうか


そもそも、ローカル変数は初期化しないとコンパイルエラーとなりますね
String question;
としてやってみれば、その旨のエラーが出ると思います
そして、その後の

question=question+"["+answer*i+"]";

の式は、question変数の後尾に、処理結果の文字列を追加していく、という式なので、最初にquestionを空にしとかないとおかしくなります

#BAをもらってしまった(?)んで、こっちの勘違いもあったので追記しておきます

投稿2020/06/29 13:39

編集2020/06/30 01:14
y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2020/06/29 14:04

初期値として空文字列を代入するというのは、int i=0のように変数を初期化するという認識で間違いないでしょうか?
y_waiwai

2020/06/29 14:18

そういうことです。 それがない場合、変数のナカミはゼロが入ります int 型の変数なら0が入るってことになりますが、 Stringの変数の場合は、nullが入るってことになります
退会済みユーザー

退会済みユーザー

2020/06/29 14:25

今回は何故nullではなく""なのでしょうか? String questionとString型になっているのでnullなのでは?と疑問に生じました。 度々質問申し訳ございません
y_waiwai

2020/06/29 14:47

ああ、ローカル変数でした。 そもそも、ローカル変数は初期化しないとコンパイルエラーとなりますね String question; としてやってみれば、その旨のエラーが出ると思います
y_waiwai

2020/06/29 14:52

その後の > question=question+"["+answer*i+"]"; の式は、question変数の後尾に、処理結果の文字列を追加していく、という式なので、最初にquestionを空にしとかないとおかしくなります
退会済みユーザー

退会済みユーザー

2020/06/29 23:34

やっと理解できました。初心者の私にご指導いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問