11/9 プログラミングコンテストの問題を解いてみる


質問と回答

Q.
よくターミナルでコンパイルする時に「シンボルを解決できません」というエラーメッセージが出るのですが、どういう意味なのでしょう か。
A.
class t{
  public static void main(String[] args){
    System.out.println(x);
  }
}
のようなプログラムをコンパイルすると出ますね.

「シンボル」というのは変数名,メソッド名,クラス名などの総称です.宣言していない 変数名,メソッド名,クラス名を参照しようとすると,このコンパイルエラーが出ます.

多くの場合は,宣言のし忘れ,タイプミス(大文字小文字の混同も含む)が原因なので,この エラーメッセージをみたら,まずはそれを疑ってみて下さい.


Q.
GameSolver.javaの原型(HighLowProblemは解けるもの)で
System.out.println(solve(new HighLowProblem(10000,-1)));
のところを
System.out.println(solve(new MooProblem(10000)));
としてコンパイルしたところ
”MooProblemはabstractではなく、Problem内のabstractメソッドget(int)をオーバーライドしません。”
というエラーメッセージが出ましたが、どうすればよいのか分かりません。
A.
このエラーメッセージは,MooProblemクラスの中で,String get(int index)というメソッドを 定義していない場合に発生します.MooProblemクラスを正しく入力しているかどうか確認してください.
Q.
GameSolverを実行したときに
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:10000
at GameSolver.solve(GameSolver.java:34)
at GameSolver.main(GameSolver.java:46)
とエラーが出るんですが、どこを直せばいいんでしょうか。
A.
どこを直すかはプログラムを見ないとわかりませんが, java.lang.ArrayIndexOutOfBoundsExceptionの意味は,
Array - 配列の
Index - 添え字が
OutOfBounds - 範囲外
という意味なので,確保したサイズを超える添え字(エラーメッセージを見ると10000)でアクセスしたことが原因である ことだけは分かります. MooProblemの実行によるものと思われますが,MooProblemのコンストラクタは
引数なし - 乱数で問題を生成
引数を指定 - index番目(0-5039)のMoo数を正解とする
という意味なので,new MooProblem(10000)のような呼び出しをしたら,例外ArrayIndexOutOfBoundsExceptionが発生します.

過去の課題について


ACM/ICPCについて


今日の課題