- ベストアンサー
javaの実行時のエラー
javaを使って圧縮プログラムを作ったのですがコンパイルは通るのに実行時に Exception in thread "main"java.lang.StringIndexOutOfBoundsException: String index out of range: 80 at java.lang.String.charAt(String.java:455) at ashuku.char1(ashuku.java:51) at ashuku.kensa1(ashuku.java:23) at ashuku.main(ashuku.java:9) というエラーが出ます。このエラーの意味は何なのですか?教えてください。プログラムが長くて載せられないので、このエラーが出たときに何をチェックすればいいか教えてもらえると助かります。お願いします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
java.lang.StringクラスのcharAt()メソッドで、例外StringIndexOutOfBoundsExceptionが発生しています。 つまり、文字列長が80以下にもかかわらず、charAt(80)として指定しているためにインデックスの範囲外という例外が発生します。 char1()がどんな引数を使用するのかはわかりませんが、ashuku.javaでchar1()を使用している個所に、以下のようにtry~catchで例外発生時の対処をするとよいでしょう。 try { char1(); // 引数はわからないので } catch (StringIndexOutOfBoundsException e) { e.printStackTrace(); } ※ インデントは全角スペースを使用したので、半角スペースに置きかえること。 また、char1()の中でcharAt()を使用する前に、以下のように文字列長を確認するデバッグ文を挿入して文字列長を確認するとよいでしょう。 System.out.println("str.length() = " + str.length()); // 対象文字列はstr
お礼
参考URL見るのを忘れてエラーの意味だけを見てやってみてできなかったので、補足にまた質問してしまいましたが、URLみたら-1つけていないことに気づき直したところできました。どうもありがとうございました。補足に書いてあることはなかったことにしてください。すみません。
補足
ありがとうございます。回答にあるエラーの意味を見て、プログラムを見たところ、charを使ってi番目の文字とi+1番目の文字を取り出し同じかどうかを比較しているところでi=79まできたとき80番目がなく取り出せないことがわかりました。char1メソッドでi番目とi+1番目の文字を取り出しStringに変えて比較を行うためのメインになるメソッドに返しており、メインになるメソッドは帰ってきた値を比較しwhile文で値が異なるまで繰り返しをしているのでi=79のとき例外で帰ってきた値が異なるようにしなくてはいけないのですがi=79のときになにをreturnすればいいのかわかりません。 カテゴリを間違えたので直し方も教えてもらいたいです