2017-11-20 3 views
0

このコードは、汎用クラスとスタック操作を学習するためのコードです。 それはに関するいくつかのエラーは、変数の型タイプキャストを伴うジェネリッククラスの「新しいオブジェクト」はありません

package lab11_2_590510535; 
import java.util.Scanner; 

class Queue <TYPE>{ 
    private int count; 
    private int front; 
    private int rear; 
    private int n; 
    private Object [] item; 
    private TYPE queueFront; 
    static void pl(Object a){System.out.println(a);} 
    static void p(Object a){System.out.print(a);} 

Queue(int x){ 
    n = x; 
    item = new Object[n]; 
    front = 0; 
    rear = -1; 
    count = 0; 
} 

public boolean isEmpty(){ 
    for(int i = 0 ; i<item.length ; i++){ 
     if(item[i] != null){return false;} 
    } 
    return true; 
} 

public boolean isFull(){ 
    if(item[item.length] != null){return true;} 
    else{return false;} 
} 

public void enqueue(TYPE v){ 
    if(!isFull()){ 
     if(rear < n-1){ 
      rear++; 
      item[rear] = v; 
      count++; 
     } 
    }else{pl("Queue is Full.");} 
} 
public TYPE dequeue(){ 
    if(!isEmpty()){ 
     queueFront = item[front]; 
     front++; 
     count++; 
    }else{p("Queue is empty.");} 
    return queueFront; 
} 
public void show(){ 
for(int i = 0 ; i <item.length ; i++){ 
    if(item[i] != null){p(item[i] + ", ");} 
} 
} 


public class Lab11_2_590510535 { 
    static void pl(Object a){System.out.println(a);} 
    static void p(Object a){System.out.print(a);} 
/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 
    Scanner keyboard = new Scanner(System.in); 
    char choice; 
    int N; 
    p("Enter N: "); 
    N = keyboard.nextInt(); 
    p("Choice input type; int(1) , char(2): "); 
    choice = keyboard.next().charAt(0); 
    if(choice == '1'){Queue <Integer> q = new Queue(N);} 
    else if(choice == '2'){Queue <Character> q = new Queue(N);} 
    do{ 
     pl("1) enqueue"); pl("2) dequeue"); pl("3) show"); pl("4) exit"); 
     p("Enter function number : "); 
     choice = keyboard.next().charAt(0); 
     if(choice == '1'){ 
      p("Enter data: "); 
      Object s = keyboard.next(); 
      q.enqueue(s); 
     } 
     else if(choice == '2'){Object s = q.dequeue(); 
      pl(s); 
     } 
     else if(choice == '3'){q.show();} 
    }while(choice != '4'); 

    } 
} 

1.Afterユーザ入力選択を宣言しており、ループはそれが「q」を見つけることができない間、私は...やるに型キャストを持つ汎用オブジェクトを作成します。

2.In public TYPE dequeue()メソッド行 "queueFront = item [front];"オブジェクトをTYPEに変換できません。どのように修正できますか?

+0

すべてがオブジェクトであり、オブジェクトを使用することは、この段階で汎用またはさらにプログラムを書くことを最悪の方法です。 –

+0

あなたのプログラムの構造は正しくありません。可変スコープを理解するためにいくつかの基本的なチュートリアルに戻るときです。残念ながら、StackOverflowはチュートリアルのサイトではなく、あなたのプログラムを修正することは基本的なチュートリアルになります。 –

答えて

0

private Object [] itemprivate TYPE [] itemに変更してください。 How to create a generic array? How to create a generic array in Java?

あなたはジェネリック型を作成することは避けてくださいしかしitem = (TYPE[]) new Object[n];

item = new Object[n];を変更する必要がありますし、代わりにあなたがそれらを注入すべきか:また、あなたはあなたの例のための一般的な配列を作成する方法を知っておく必要がありますファクトリを使用してそれらを作成します。

関連する問題