質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

2回答

1939閲覧

java.lang.ArrayIndexOutOfBoundsExceptionの解決方法を示してほしい

no_name78

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2021/06/03 01:23

実行結果が
10,20,30,40,50
ng
10,20,30,40,50
となるようにしたいのですが、

10,20,30,40,50
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds
for length 5
at queue.IntQueue00.enqueue(IntQueue00.java:19)
at queue.IntQueue00.enqueue(IntQueue00.java:5)
at queue.tester.TesterQ00.main(TesterQ00.java:14)
と返ってきてしまいます。

どこをどのようにすれば修正できるのでしょうか。
お示しいただけると助かります。

java

1import java.util.StringJoiner; 2 3public class IntQueue00 implements Queue<Integer> { 4 private Integer[] data; 5 private int in, out, size; 6 7 public IntQueue00() { this(8); } 8 9 public IntQueue00(int max) { 10 data = new Integer[max]; 11 in = 0; 12 out = 0; 13 size = 0; 14 } 15 16 public boolean enqueue(Integer v) { 17 data[in] = v; 18 in += 1; 19 size ++; 20 return true; 21 } 22 23 public Integer dequeue() { 24 Integer ans = null; 25 ans = data[out]; 26 out += 1; 27 size --; 28 return ans; 29 } 30 31 public boolean isEmpty() { return (0 == size);} 32 33 public void clear() { 34 size = 0; 35 in = 0; 36 out = 0; 37 } 38 39 public int size() { return size; } 40 41 public String toString() { 42 StringJoiner j = new StringJoiner(","); 43 for (int p = 0 ,s = 0; s < data.length; s++) { 44 j.add(data[p].toString()); 45 p += 1; 46 47 } 48 return "[" + j.toString() + "](" + size + ")"; 49 } 50}

java

1public interface Queue <V> { 2 public boolean enqueue(V v); 3 public V dequeue(); 4 public boolean isEmpty(); 5 public void clear(); 6 public int size(); 7}

java

1public class TesterQ00 { 2 public static void main(String[] args) { 3 Queue q1 = new IntQueue00(5); 4 q1.enqueue(10); 5 q1.enqueue(20); 6 q1.enqueue(30); 7 q1.enqueue(40); 8 q1.enqueue(50); 9 System.out.println(q1); 10 boolean f = q1.enqueue(60); 11 System.out.println((f ? "ok" : "ng")); 12 System.out.println(q1); 13 } 14}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/06/03 01:34

IntQueue00クラスは質問者であるno_name78さんご自身で書いたコードでしょうか。
momon-ga

2021/06/03 03:32

boolean f = q1.enqueue(60); のfをfalseにしたいということですが、現状無条件でreturn trueしていますが、 どのような条件でfalseにするのでしょうか?
guest

回答2

0

ベストアンサー

単純にエラーを直すでなく、正しい仕様の理解が必要かと思います。

boolean f = q1.enqueue(60);

のfをfalseにしたいということですが、現状無条件でreturn trueしていますが、
どのような条件でfalseにするのでしょうか?

この条件を自身で決めないことには、
以下のような修正で要件を満たすことになりますが、それでよいのでしょうか?

java

1public boolean enqueue(Integer v) { 2 if(v == 60) return false; 3 data[in] = v; 4 in += 1; 5 size ++; 6 return true; 7}

投稿2021/06/03 03:39

momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2021/06/03 03:52

> 正しい仕様の理解が必要 clear、dequeueもバグってるように感じますが。 仕様がわからないのでなんとも・・・
no_name78

2021/06/03 05:03

条件の説明が足りずすみませんでした。 momon-gaさんのアンサーを参考にenqueueにおいてif(data.length <= size)の時にfalseを返すようにするとうまく動くようになりました。ありがとうございました。
guest

0

どこをどのようにすれば修正できるのでしょうか。

現状のコードでは、IntQueue00.enqueuetrueを返すルートしか存在しません。

enqueueメソッドの内部で、以下のどちらかの対応を行う必要があります。

  • 追加する前に長さをチェックして、はみ出す場合はfalseを返すようにする(ふつうはこちらで実装する)
  • ArrayIndexOutOfBoundsExceptioncatchする

投稿2021/06/03 01:35

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問