解決済み

回答の意味が解りません。

  • 困ってます
  • 質問No.9517640
  • 閲覧数233
  • ありがとう数16
  • 気になる数0
  • 回答数9
  • コメント数0

お礼率 91% (394/429)

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度、解説のほど、宜しくお願い申し上げます。

質問者が選んだベストアンサー

  • 回答No.9

ベストアンサー率 54% (263/485)

他カテゴリのカテゴリマスター
>回答No.8 amanojaku1

Javaの場合、オブジェクトは全て「参照型」(ポインタによって「参照」されている)です。
Javaの場合、配列も文字列もオブジェクトなので「参照型」(ポインタによって「参照」されている)です。
プリミティブ型について下記を参照して下さい。

【Java】基本データ型(プリミティブ型)について
https://nobuo-create.net/primitive/
お礼コメント
jump7799

お礼率 91% (394/429)

お陰様で「参照の意味」が少しだけ解りました。
投稿日時 - 2018-07-13 01:24:34
感謝経済

その他の回答 (全8件)

  • 回答No.8

ベストアンサー率 54% (263/485)

他カテゴリのカテゴリマスター
>ポインタの場合の「参照」とは、ポインタによる「参照」です。
>配列の"要素"を「参照」するのとは意味が違うので注意して下さい。

添付画像が「プリミティブ型」と「参照型」の模式図です。
配列の場合は、添付画像の「データ」が配列に対応します。
お礼コメント
jump7799

お礼率 91% (394/429)

ご丁寧にありがとうございます。

amanojaku1さんを目指します。
投稿日時 - 2018-07-13 01:04:41
  • 回答No.7

ベストアンサー率 54% (263/485)

他カテゴリのカテゴリマスター
>ポインタの場合の「参照」とは、ポインタによる「参照」です、意味が違うので注意して下さい。

ポインタの場合の「参照」とは、ポインタによる「参照」です。
配列の"要素"を「参照」するのとは意味が違うので注意して下さい。
お礼コメント
jump7799

お礼率 91% (394/429)

ご回答誠にありがとうございました。

ポインタは難しいです。
投稿日時 - 2018-07-13 01:06:08
  • 回答No.6

ベストアンサー率 54% (263/485)

他カテゴリのカテゴリマスター
>ポインタの場合の「参照」とは、ポインタによる「参照」です(何か言葉で言うと意味不明かもしれませんが)。

ポインタの場合の「参照」とは、ポインタによる「参照」です、意味が違うので注意して下さい。
  • 回答No.5

ベストアンサー率 54% (263/485)

他カテゴリのカテゴリマスター
>配列要素の場合では「参照」とは棚の区画の中を見ると言うイメージです

配列の"要素"を「参照」するとは棚の区画の中を見ると言うイメージです
Javaの配列自体が「参照型」(ポインタによって「参照」されている)ですが、意味が違うので注意して下さい。
お礼コメント
jump7799

お礼率 91% (394/429)

ご回答誠にありがとうございます。
投稿日時 - 2018-07-13 00:41:37
  • 回答No.4

ベストアンサー率 54% (263/485)

他カテゴリのカテゴリマスター
配列は棚をイメージして下さい。
添付ファイルの向かって左が「1次元配列」、添付ファイルの向かって右が「2次元配列」と言うイメージです。
配列要素の場合では「参照」とは棚の区画の中を見ると言うイメージです、(「args[0]」とは「args」配列の「0」番目の要素ですので)、「args」と言う名前の棚の「0」番目の区画と言うイメージです。
ポインタの場合の「参照」とは、ポインタによる「参照」です(何か言葉で言うと意味不明かもしれませんが)。

質問の場合は、棚の作成に失敗して、何も入れられない棚を作ってしまったらめに、棚の「0」番目の区画を「参照」しようとしたら、それが存在しないのでエラーになったと言うことです。
お礼コメント
jump7799

お礼率 91% (394/429)

解りやすいご説明、どうもありがとうございました。
投稿日時 - 2018-07-13 00:44:17
  • 回答No.3

ベストアンサー率 28% (1321/4609)

Java カテゴリマスター
>C:\WORK>java test16 テスト1 テスト2
>とはどういったケースに使うのですか?

#2の方もいわれていますけどtest16が何をするプログラムなのか把握していますか?
あなたが自分で作ったわけではなく何かの本やwebサイトに書いてあったプログラムでしょうから、その説明があったと思うのですけど。

書いてあるのを何も考えずにタイプしてコンパイル・実行して「動いたー」「何かエラーが出たー」とかやってる状態だといつまでたっても自分でプログラム組めるようになんてなりませんよ。
お礼コメント
jump7799

お礼率 91% (394/429)

おっしゃる通りですね。

モット、頭を使います。
投稿日時 - 2018-07-13 00:46:06
  • 回答No.2

ベストアンサー率 43% (718/1636)

根本的に「何をするためのプログラムか」と言うことが理解できていないと思われます。

何をするプログラムかわかっていないから、どうやったら動くかもわからないのです。

何をするプログラムかわからないままプログラムを覚えても、何もできないプログラムしか覚えられませんよ。

掲題のプログラムでは、mainに引数として文字列配列「args」が設定されています。
ですから、プログラムの実行には引数である文字列が必ず必要になりますが、あなたは実行時に引数を全く与えていません。エラーが出るのは当然です。
お礼コメント
jump7799

お礼率 91% (394/429)

おっしゃる通りですね。

モット、頭を使います。
投稿日時 - 2018-07-13 00:48:33
  • 回答No.1

ベストアンサー率 41% (44/107)

args[0] ・・・・・argsの1番目
args[1] ・・・・・argsの2番目

という意味です。

C:\WORK>java test16 テスト1 テスト2
とやれば、

 args[0] ・・・・・テスト1
 args[1] ・・・・・テスト2

となりますが、

C:\WORK>java test16
とやれば、

 args[0] ・・・・・無し
 args[1] ・・・・・無し

となります。
無いものを見ようとすると(参照しようとすると)、エラー(例外)になります。

無いものを見ようとしているのは、
args[0].length()
のところ(5行目)です。
お礼コメント
jump7799

お礼率 91% (394/429)

ご回答誠にありがとうございました。


C:\WORK>java test16 テスト1 テスト2

とはどういったケースに使うのですか?
投稿日時 - 2018-07-12 22:10:46
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ