回答の意味が解りません。
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度、解説のほど、宜しくお願い申し上げます。