// 用java 和数组构造一个栈并存取数据
class Q  
{
char q[];
int putloc,getloc;
Q(int size)
{
q=new char[size+1];
putloc=getloc=0;
}
void put(char ch)      //存数据的方法
{
if(putloc==q.length-1)
{
System.out.println("--Stack is full");
return;
}
putloc++;
         q[putloc]=ch;
}
char get()        //取数据的方法
{
if(putloc==getloc)
{
System.out.println("--Stack is empty");
return (char)0;
}
getloc++;
return(q[ getloc ]);
}
}
class queue
{
public static void main(String args[ ])
{
int i;
char m;
Q bigQ=new Q(100);
Q smallQ=new Q(4);
for(i=0;i<26;i++)
{
bigQ.put((char)('A'+i));
}
for(i=0;i<26;i++)
{
m=bigQ.get();  
if(m!=(char)0) 
{
System.out.print(m+" "); 
}
}
}
}
以上的程序会输出 A B C D E F G H I J K L M N O P Q R S T U V W Y Z
//////////////////////////////////////////////////////////////////////////
而把最后的  for(i=0;i<26;i++)
{
m=bigQ.get( );  
if(m!=(char)0) 
{
System.out.print(m+" ");  
}
}
改为:
             for(i=0;i<26;i++)
{
         bigQ.get()  // 原来是m=bigQ.get();
         if(bigQ.get()!=(char)0)
{
System.out.print(bigQ.get( )+" ");
}
}之后,其他部分不变,却输出 B D F H J L N P R T V X Z ---Stack is empty
------Stack is empty
------..........
...........
..........问题:搞不明白修改后为什么是这样输出,渴望高手解释一下,小弟感激不尽,高分奉送!!

解决方案 »

  1.   

    问题在bigQ.get()  ,你没调用一次get函数,getloc都会加一,修改后的函数调用了两次get,所以每次for循环getloc加2,而不是你期望的加1。
    改成这样就好了。
                 for(i=0;i<26;i++)
    {
             if(bigQ.get()!=(char)0)
    {
    System.out.print(bigQ.get( )+" ");
    }
    }
      

  2.   

    问题在get()方法的下面两行代码:
    getloc++;
    return(q[ getloc ]);
    因为每一调用get(),getloc向前移一个,所以在
    bigQ.get();
    if(bigQ.get()!=(char)0)
    {
        System.out.print(bigQ.get( )+" ");
    }
    中,实际上每次都读了两次(getloc向前移两次),而只有两次中的第二次被打印出来了。