Edited at
Tech FunDay 16

プログラムが動きません、プログラムが止まりません・・・

More than 1 year has passed since last update.


はじめに

(※ こちらの記事は、プログラムを学び始めたばかりの方を対象としています。)

プログラムを始めたばかりの未経験プログラマや新人プログラマは、

『バグが発生したらどうしよう?』『これで動かなくなったら・・・』など不安がいっぱいかもしれませんが、

まずは、プログラムを動かさないと始まらないので、とりあえず動かしてみましょう:thumbsup_tone2:


ITスクール講師をやっていると・・・

『すみません・・・なんか、動かないんですけど・・・:frowning2::frowning2:

『変な文字がいっぱい出てきてしまいました・・・:sob:

『プログラムが止まりませんー:scream:

:computer:スクール講師:computer:をやっているので、このような質問には、もちろん丁寧にお答えしますが、

それは、 初めのうち だけね:sweat_smile:

最終的には、自身で解決しなくてはいけないので:walking_tone1:


まずは落ち着こう

プログラムが動いていないときでも、止まらないときでも、まずは落ち着きましょう。

必ず原因があるんです:bangbang:


プログラムが止まらなかったとき

(※今回は Eclipse を使用している前提で記述します)

まずは止めましょう:sweat_smile:

for文の練習問題などで、無限ループなどにハマった時に、良くあります。

stop3.png

無限ループの原因となったコードがこちら

    Calendar cal = Calendar.getInstance();

int year = cal.get(Calendar.YEAR);

List<Integer> yearList = new ArrayList<Integer>();

// 現在の年から10年後までをリストに格納
for(int i = year ; i <= year + 10; year++){

yearList.add(i);

}

デバッグモード」を利用すれば、すぐ気が付けますが、まだデバッグ方法を知らなかった場合、

(すぐにデバッグモードは調べてくださいね:expressionless:)

yearList.add(i);System.out.println(i);として出力させてみると気が付くはずです。

(すぐに止めてくださいね:expressionless::expressionless:)

今回は、繰り返し条件の中のyear++が原因でした。yearが増えていったら、止まるわけないですよね。


プログラムが動かなかったとき

まずは「コンソールを見ましょう:eyes::eyes:

エラー内容や該当箇所が出力されているはずです。

以下、バグを仕込んだプログラムを動作させてコンソールに表示された内容です。

java.lang.NullPointerException  // ★エラー内容

at instructor.BugCode.main(BugCode.java:17) // ☆エラー発生箇所

java.lang.ArithmeticException: / by zero // ★エラー内容

at instructor.BugCode.main(BugCode.java:38) // ☆エラー発生箇所

複数行でも慌てずに、「・・・Exception」の箇所と、自分が作成したクラス名を探してみましょう:exclamation:

java.lang.IndexOutOfBoundsException: Index: 3, Size: 2 // ★エラー内容

at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at instructor.BugCode.main(BugCode.java:52) // ☆エラー発生箇所

★エラー内容と☆エラー発生箇所を確認できれば、ある程度見当が付くはずです。

Exception については、面倒くさがらずに、ちゃんと調べましょ:rage:


おわりに

はじめに書きましたが、プログラムは動かさないと始まらないです。

バグを怖がっていたら成長できません:arrow_lower_right:(無謀なコードは止めてくださいね:rolling_eyes:)

バグの無いプログラムは無いので、どんどんプログラムを動かし、バグ特定に慣れ、

常にバグ改修と戦っていきましょ~:fist: