为什么在第二次移动是第一个数消失了?如何改正
#include <iostream>
using namespace std;
class pt
{
public:
int a[3][3];
int i=0,j=0,x,y;
int n=0,count1=0;
char st;
void seta()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cin>>a[i][j];
}
}
}
void geta()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
cout<<" ";
}
else cout<< a[i][j] <<" ";
}
cout <<endl;
}
}
void left()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
x=i;y=j;
}
}
}
a[x][y]=a[x][y+1];
a[x][y+1]=0;
}
void right()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
x=i;y=j;
}
}
}
a[x][y]=a[x][y-1];
a[x][y-1]=0;
}
void up()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
x=i;y=j;
}
}
}
a[x][y]=a[x+1][y];
a[x+1][y]=0;
}
void down()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
x=i;y=j;
}
}
}
a[x][y]=a[x-1][y];
a[x-1][y]=0;
}
int co()
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if( a[i][j]=n++)
count1=1;
else
{
count1=0;
return 0;
}
}
}
return 1;
}
};
int main()
{ int flag=0;
pt m;
m.seta();
m.geta();
while(flag==0)
{
cin>>m.st;
if(m.st=='a')
{
m.left();
}
else if(m.st=='d')
{
m.right();
}
else if(m.st=='w')
{
m.up();
}
else if(m.st=='s')
{
m.down();
}
m.geta();
flag=m.co();
}
return 0;
}
```