C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 型がおかしい?


(過去ログ 108 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■64318 / inTopicNo.1)  型がおかしい?
  
□投稿者/ NattoRC (7回)-(2012/11/25(Sun) 20:40:43)

分類:[Java] 

よろしくお願いします。

リングバッファのキューを作成しています。
indexメソッドは何番目に格納されているかのメソッドです。デバックするとデータが同一のときも、
if文の中には入りません。
なぜかご教授いただけたらと思います。
渡すデータの型が違うのではないかとおもい、Object型など試してみましたが、だめでした。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
public class IntAryQueue <E>{

private int max; // 最大
private int num; // キューに格納されている個数
private int front; // 先頭
private int rear; // 末尾
private E [] que; // キュー

// コンストラクタ
public IntAryQueue(int capacity) {
max = capacity;
num = 0;
front = 0;
rear = 0;
try {
que =(E[]) new Object[max];
} catch (OutOfMemoryError e) {
max = 0;
}
}

// オーバーフロー
public static class OverflowIntAryQueueException extends RuntimeException {
OverflowIntAryQueueException() {
}
}

// エンプティ
public static class EmptyIntAryQueueException extends RuntimeException {
EmptyIntAryQueueException() {
}
}

// エンキュー
public void enque(E x) {
// キューが満杯のときエラー
if (num >= max) {
throw new OverflowIntAryQueueException();
}
// そうでなければキューに追加する
que[rear++] = x;
num++;
// 配列の最後までいったときカウントを0にする
if (rear >= max) {
rear = 0;
}
}

// デキュー
public E deque() {
// キューが空のときエラー
if (num <= 0) {
throw new EmptyIntAryQueueException();
}
// キューから取得する
E x = que[front];
que[front++] = null;
num--;
// 配列の最後までいったとき
if (front >= max) {
front = 0;
}
return x;
}

// ピーク
public E peek() {
// キューが空のときエラー
if (num <= 0) {
throw new EmptyIntAryQueueException();
}
// そうでなければキューからピークする
return que[front];
}

// インデックス検索 表示されるデータの何番目に存在するか
public int index(E x) {
int tmpfront = front;
int cnt = 1;
for (int i = 0; i <= num; i++) {
if (que[tmpfront++] == x) {
return cnt;
}
cnt++;
// 配列の最後までいったときfrontを0にする
if (tmpfront == max) {
tmpfront = 0;
}
}
return -1;
}

// キューをからにする
public void empty() {
for (int i = 0; i < max; i++) {
que[i] = null;
}
}

// キューの容量を返す
public int capacity() {
return max;
}

// データ数を返す
public int size() {
return num;
}

// キューはからであるか
public boolean isEmpty() {
return num <= 0;
}

// キューは満杯であるか
public boolean isFull() {
return num >= max;
}

// キューのデータを先頭→末尾に表示
public void dump() {
int tmpfront = front;
for (int i = 1; i <= num; i++) {
System.out.println(que[tmpfront]);
tmpfront++;

// 配列の最後までいったときfrontを0にする
if (tmpfront == max) {
tmpfront = 0;
}
}
}
}


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

import java.util.Scanner;

class IntAryQueueTester {

public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
IntAryQueue<String> s = new IntAryQueue<String>(4); // 最大100個プッシュできるキュー

while (true) {
System.out.println("現在のデータ数:" + s.size() + " / " + s.capacity());
System.out.print("(1)エンキュー (2)デキュー (3)ピーク "
+ "(4)ダンプ (5)インデックス (0)終了:");

int menu = stdIn.nextInt();
if (menu == 0)
break;

String x = "";
switch (menu) {
case 1: // エンキュー
System.out.print("データ:");
x = stdIn.next();
try {
s.enque(x);
} catch (IntAryQueue.OverflowIntAryQueueException e) {
System.out.println("キューが満杯です。");
}
break;

case 2: // デキュー
try {
x = (String) s.deque();
System.out.println("デキューしたデータは" + x + "です。");
} catch (IntAryQueue.EmptyIntAryQueueException e) {
System.out.println("キューが空です。");
}
break;

case 3: // ピーク
try {
x = (String) s.peek();
System.out.println("ピークしたデータは" + x + "です。");
} catch (IntAryQueue.EmptyIntAryQueueException e) {
System.out.println("キューが空です。");
}
break;

case 4: // ダンプ
s.dump();
break;

case 5: // インデックス検索 表示されるデータの何番目に存在するか
System.out.print("探したいデータ:");
x = stdIn.next();
try {
int cnt = s.index(x);
if (cnt == -1) {
System.out.println("探したいデータはありません。");
break;
}
System.out.println("探したいデータは" + cnt + "番目にあります。");
} catch (IntAryQueue.EmptyIntAryQueueException e) {
System.out.println("キューが空です。");
}
break;
}
}
}
}


引用返信 編集キー/
■64319 / inTopicNo.2)  Re[1]: 型がおかしい?
□投稿者/ επιστημη (27回)-(2012/11/25(Sun) 21:03:31)
επιστημη さんの Web サイト
> 	// インデックス検索 表示されるデータの何番目に存在するか
> 	public int index(E x) {
> 		int tmpfront = front;
> 		int cnt = 1;
> 		for (int i = 0; i <= num; i++) {
> 			if (que[tmpfront++] == x) { // [*]
> 				return cnt;
> 			}
> 	...

[*] Javaってオブジェクトを==で等値比較できるっけ? equals() 使うんじゃないっけ?

引用返信 編集キー/
■64320 / inTopicNo.3)  Re[2]: 型がおかしい?
□投稿者/ NattoRC (8回)-(2012/11/25(Sun) 21:15:25)
No64319 (επιστημη さん) に返信
> > // インデックス検索 表示されるデータの何番目に存在するか
>> public int index(E x) {
>> int tmpfront = front;
>> int cnt = 1;
>> for (int i = 0; i <= num; i++) {
>> if (que[tmpfront++] == x) { // [*]
>> return cnt;
>> }
>> ...
>
> [*] Javaってオブジェクトを==で等値比較できるっけ? equals() 使うんじゃないっけ?
>

ありがとうございます(汗)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -