ここから本文です

変数の宣言をwhile文の外に書くと頻繁に繰り返して動かなくなる理由は何ですか? ...

kok********さん

2019/10/919:45:10

変数の宣言をwhile文の外に書くと頻繁に繰り返して動かなくなる理由は何ですか?
上記について解説した本・サイトはありますか?

何卒宜しくお願い致します。

(例)
string str = sc.nextline()

while(true)


閲覧数:
56
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

あみやさん

2019/10/920:53:40

『変数の宣言をwhile文の外に書くと頻繁に繰り返して動かなくなる』
そういうことは無いので、理由もありません。

whileの中に書くか外に書くかは、ループとして繰り返したいかどうかによります。
ちなみに、ループは1回毎にそのブロックを抜けるので、
while(????){
String str = sc.nextline();
何かの処理
}
とした場合のstrはブロックの終わりと共に毎回破棄されますし、
whileの外では使えません。
String str;
while(????){
str = sc.nextline();
何かの処理
}
とした場合は、再代入されるまでは有効ですし(Javaの文字列は代入の度に再生成されます)、
whileの外でも使えます。

  • 質問者

    kok********さん

    2019/10/923:43:05

    ありがとうございます。
    内容はハイ&ローのゲームのプログラムです。ハイかローかを入力して、入力内容と結果をequalで比べて、負けるまで繰り返す内容です。

    自分のミスのせいで、原因不明のエラーが起きるのが辛すぎるので、解説した本が欲しかったのですが、
    プログラマーって大変なんですね

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

bas********さん

2019/10/1114:31:42

まず、ほかの方々もおっしゃっているように、
「そんな本はない」のが実情かと思います。

ではどうするのか。

コンパイルエラーや例外によるエラーならそれを読んで対策をします。
「変数one なんてないぞ?」っていうのであれば変数 one を定義し...みたいに。

で、今回のように実行時に例外ではないほうのエラーが出るのであれば、「デバッグ」します。

CやC++でMinGW でやっているのなら GDB, VC++なら内蔵のデバッガ、
Javaなら... https://docs.oracle.com/javase/jp/6/technotes/tools/windows/jdb.htm... とか。
「言語名 +"デバッガ"」等で検索してみてください。

例:
「Java デバッガ」

こうやってプログラマやSEは強くなっていくのです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

2019/10/921:55:14

> 頻繁に繰り返して動かなくなる理由は何ですか?
while文の中だったら、stringで新しいインスタンスをどんどん生成してメモリを食いつぶしてGCが間に合わなかったとかありそうですけれど、ループの外ですか。ロジックの間違いでループの脱出条件が満たされなくなってそのまま...という可能性が高そうに思います。

> 上記について解説した本・サイトはありますか?
「間違い」について解説した本ってあまりないですね。間違いのバリエーションは無限と言っていいほどあるので、解説してもし切れませんし、「今回のあなたの間違い」がなにかもわかっていないわけですし。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

nan********さん

2019/10/920:41:21

状況がよくわかりませんが、おそらくnextline()はファイルなどから、次の行を読み込む、と言うメソッドと思います。
普通なら、ファイルには何行かデータがあるので、繰り返してnextline()を読んで、ファイルの内容全部を読むと思います。
ですので、

while(????){
String str = sc.nextline();
何かの処理
}

とするのが一般的かと思います(もちろん絶対これということじゃないです)。

で、上記の????の部分も、一般的には読み込もうとするファイルにまだデータが存在するかどうかを判定するものを記述します。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる