class test16 { public static void main(String args[]) { int digits = 0; int letters = 0; for (int i = 0; i < args[0].length(); i = i + 1) { char ch = args[0].charAt(i); // 数字 if (Character.isDigit(ch)) digits += 1; else if (Character.isLetter(ch)) // 英字 letters += 1; } System.out.println("There are " + digits + "digits"); System.out.println("There are " + letters + "letters"); } } C:\WORK>javac -encoding UTF-8 test16.java C:\WORK>java test16 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at test16.main(test16.java:5) お陰様で、コンパイルはできました。 しかし、実行時に、メッセージが出ます。 どうしてでしょうか? ご回答のほど宜しくお願い申し上げます。 ご回答 argsにデータが入っていないのに args[0]を参照したからエラーになっています。 public static void main(String[] args)の引数argsは コマンドプロンプトでjavaコマンド実行時に入力されたデータが入っています。 今回の例だと C:\WORK>java test16 テスト1 テスト2 のように実行クラス「test16」の後ろにスペースで文字を入力すると argsには、args = {"テスト1", "テスト2"}のデータが入ります。 質問者さんのjavaコマンドは以下で C:\WORK>java test16 「test16」の後ろにデータを入れていません。 そのため、args={}となり、データが無いargsが出来上がります。 そのため、args[0]は存在しないからエラーが出ます。 エラーを回避するには C:\WORK>java test16 「この後に何か文字を入れる」 ボクは「参照」の意味もまだつかめてません。 どいうことですか? 他にも沢山質問があります。 回答者の方も解りやすくご回答なさったと 思いますが、すみません。 今1度、解説のほど、宜しくお願い申し上げます。
↧