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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

2回答

1487閲覧

Java キューの削除がうまくいきません。

frere

総合スコア4

Java

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/07/22 18:46

編集2021/11/17 20:05

A   キー入力
[A]
[A]
[A]
B   キー入力
[A,B]
[A,B]
[A,B]
C   キー入力
[A,B,C]
[A,B,C]
[A,B,C]
d   キー入力
A [B,C]
上記の実行結果を得たいのですが下記の出力を得てしまいます。ジェネリクスのdequeue()メソッドに問題があるのでしょうか
A
[A]
[A]
[A]
B
[A,B]
[A,B]
[A,B]
C
[A,B,C]
[A,B,C]
[A,B,C]
d
A [A,B]

Java

1 2package exer3.queue; 3 4public interface Queue <T> { 5 public abstract boolean enqueue(T d); 6 public abstract T dequeue(); 7 public abstract boolean isEmpty(); 8 public abstract void clear(); 9} 10 11 12 13 14package exer3.queue; 15import java.util.StringJoiner; 16 17public class FixedArrayQueue<T> implements Queue<T> { 18 private T[] data; 19 private int in; 20 private int out; 21 private int size; 22 private int limit; 23 24 public FixedArrayQueue(){ 25 this(5); 26 } 27 28 public FixedArrayQueue(int size){ 29 clear(); 30 limit = size; 31 data = (T[]) new Object[limit]; 32 } 33 34 public boolean enqueue(T d){ 35 if (limit <= size) 36 return false; 37 data[in++] = d; 38 in %= limit; 39 size++; 40 return true; 41 } 42 43 public T dequeue(){ 44 if (size <= 0) 45 return null; 46 out %= limit; 47 size--; 48 return data[out++]; 49 } 50 51 public boolean isEmpty(){ 52 return (size == 0); 53 } 54 55 public void clear() { 56 in = 0; 57 out = 0; 58 limit = 0; 59 size = 0; 60 } 61 62 public String toString(){ 63 if (isEmpty()) 64 return "[]"; 65 StringJoiner j = new StringJoiner(","); 66 for(int i = 0; i < size; i++) 67 j.add(data[i].toString()); 68 return " [" + j.toString() + "]"; 69 } 70} 71 72 73

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

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

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

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

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

guest

回答2

0

ベストアンサー

FixedArrayQueue

FixedArrayQueueだけの問題でしょう。toString()の表示が配列の要素0から始まるのでおかしい。それ以外は動作も表示も問題なさそうです。

Java

1// j.add(data[i].toString()); 2j.add(data[(i+out)%limit].toString());

テストケース(JUint5)を追記。テストはクラスごとに実行してください。setUp()メソッドでクラスのインスタンスを作り変えます。上の一箇所の修正で、全てのクラスのテストがOKでした。

Java

1import static org.junit.jupiter.api.Assertions.*; 2 3import org.junit.jupiter.api.AfterEach; 4import org.junit.jupiter.api.BeforeEach; 5import org.junit.jupiter.api.Test; 6 7class FixedArrayQueueTest { 8 9 Queue<String> queue; 10 @BeforeEach 11 void setUp() throws Exception { 12 queue = new FixedArrayQueue<>(3); 13 } 14 15 @AfterEach 16 void tearDown() throws Exception { 17 } 18 19 @Test 20 void testEmpty() { 21 assertTrue(queue.isEmpty()); 22 assertEquals(" []",queue.toString()); 23 } 24 25 @Test 26 void test1() { 27 boolean result = false; 28 result = queue.enqueue("A"); 29 assertTrue(result); 30 assertFalse(queue.isEmpty()); 31 assertEquals(" [A]",queue.toString()); 32 } 33 34 @Test 35 void testDequeue1() { 36 boolean result = false; 37 result = queue.enqueue("A"); 38 assertTrue(result); 39 String top = queue.dequeue(); 40 assertEquals("A",top); 41 assertEquals(" []",queue.toString()); 42 } 43 44 @Test 45 void testEnqueue3Dequeue1() { 46 boolean result = false; 47 result = queue.enqueue("A"); 48 assertTrue(result); 49 result = queue.enqueue("B"); 50 assertTrue(result); 51 result = queue.enqueue("C"); 52 assertTrue(result); 53 assertEquals(" [A,B,C]",queue.toString()); 54 String top = queue.dequeue(); 55 assertEquals("A",top); 56 assertEquals(" [B,C]",queue.toString()); 57 } 58 59 @Test 60 void testEnqueue3Dequeue3() { 61 String top = ""; 62 boolean result = false; 63 64 result = queue.enqueue("A"); 65 assertTrue(result); 66 result = queue.enqueue("B"); 67 assertTrue(result); 68 result = queue.enqueue("C"); 69 assertTrue(result); 70 71 assertEquals(" [A,B,C]",queue.toString()); 72 top = queue.dequeue(); 73 assertEquals("A",top); 74 assertEquals(" [B,C]",queue.toString()); 75 top = queue.dequeue(); 76 assertEquals("B",top); 77 assertEquals(" [C]",queue.toString()); 78 top = queue.dequeue(); 79 assertEquals("C",top); 80 assertEquals(" []",queue.toString()); 81 } 82 83 84} 85

投稿2020/07/23 02:11

編集2020/07/23 02:36
xebme

総合スコア1090

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

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

frere

2020/08/09 09:09

ありがとうございました 助かりました
guest

0

とりあえず、FixedArrayQueueから。
問答無用で配列の中身を頭から文字にして返しているので、そうなります。

投稿2020/07/22 19:24

amiya

総合スコア1218

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

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

frere

2020/08/09 09:09

あれから試してみました。 詳しくありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問