次のようなインターフェイスを持つ 2 つのファイルを作成しました。
public interface ICharQ {
void put(char ch);
char get();
}
および実装クラスは次のとおりです。
//A fixed size Queue class for characters
class FixedQueue implements ICharQ{
private char q[]; //This queue holds the characters
private int putloc, getloc; //the put and get indices
public FixedQueue(int size){
q = new char[size+1]; //allocate memory for the queue
putloc = getloc = 0;
}
//Put a character into the queue
public void put(char ch){
if(putloc == q.length - 1){
System.out.println(" - Queue is full");
return;
}
putloc++;
q[putloc] = ch;
}
//Get a character from the Queue
public char get(){
if(getloc == putloc){
System.out.println(" - Queue is empty");
return (char) 0;
}
getloc++;
return q[getloc];
}
}
//A circular Queue
class CircularQueue implements ICharQ{
private char q[]; //This queue holds the characters
private int putloc, getloc; //the put and get indices
public CircularQueue(int size){
q = new char[size+1]; //allocate memory for the queue
putloc = getloc = 0;
}
//Put a character into the queue
public void put(char ch){
/*Queue is full if putloc is one less than getloc or if putloc is at the end and getloc is at the beginning */
if((putloc + 1 == getloc)|(putloc == q.length-1 & getloc == 0)){
System.out.println(" - Queue is full");
return;
}
putloc++;
if(putloc == q.length) putloc = 0; //reset loop
q[putloc] = ch;
}
//Get character from the Queue
public char get(){
if(getloc == putloc){
System.out.println(" - Queue is empty");
return (char) 0;
}
getloc++;
if(getloc == q.length) getloc = 0;
return q[getloc];
}
}
//A dynamic Queue
class DynQueue implements ICharQ {
private char q[]; // this array holds the queue
private int putloc, getloc; // the put and get indices
// Construct an empty queue given its size.
public DynQueue(int size) {
q = new char[size+1]; // allocate memory for queue
putloc = getloc = 0;
}
//put a character into the queue
public void put(char ch){
if(putloc == q.length-1){
//increase queue size
char t[] = new char[q.length * 2];
//copy elements into the new queue
for(int i=0; i<q.length; i++)
t[i] = q[i];
q = t;
}
putloc++;
q[putloc] = ch;
}
// Get a character from the queue.
public char get() {
if(getloc == putloc) {
System.out.println(" – Queue is empty.");
return (char) 0;
}
getloc++;
return q[getloc];
}
}
//Demonstrate the ICharQ interface
class IQDemo{
public static void main(String args[]){
FixedQueue q1 = new FixedQueue(10);
DynQueue q2 = new DynQueue(5);
CircularQueue q3 = new CircularQueue(10);
ICharQ iQ;
char ch;
int i;
iQ = q1;
//Put some characters into the fixed queue
for(i = 0; i<10; i++){
iQ.put((char)('A' + i));
}
//Show the queue
for(i=0; i<10; i++){
System.out.print("Contents of fixed queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
}
System.out.println();
iQ = q2;
// Put some characters into dynamic queue.
for(i=0; i < 10; i++)
iQ.put((char) ('Z' - i));
// Show the queue.
System.out.print("Contents of dynamic queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
iQ = q3;
// Put some characters into circular queue.
for(i=0; i < 10; i++)
iQ.put((char) ('A' + i));
// Show the queue.
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
// Put more characters into circular queue.
for(i=10; i < 20; i++)
iQ.put((char) ('A' + i));
// Show the queue.
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println("\nStore and consume from" +
" circular queue.");
// Use and consume from circular queue.
for(i=0; i < 20; i++) {
iQ.put((char) ('A' + i));
ch = iQ.get();
System.out.print(ch);
}
}
}
これで、ファイルは同じディレクトリにあります。ICharQ.java ファイルは正常にコンパイルされます。しかし、IQDemo.java をコンパイルしようとすると、ICharQ が見つからないというエラーが表示されます。
ただし、インターフェイス ファイルからパブリック アクセサーを削除し、IQDemo にコードを含めると、完全に機能します。しかし、それをパブリックに変更した瞬間、コンパイルされません。
コードに何か問題がありますか、それとも何かを見逃していますか? よろしくお願いします。