这道题遇到的坑太多了:
- 输入单个字符成问题,用System.in.read()就会出现InputMismatchException,说int k=scanner.nextInt();出错,最后我用了scanner.next()方法输入字符串然后再用charAt()方法才取出了s。
- 对于向前移一格这个步骤,我刚开始写了一个函数,然后在主函数里调用这个方法,发现值传递引发了错误,x和y并不能真正地被进行加减操作,于是只好把这个操作全部放到主函数里边来。当然这里要用if{} else if{} else{}语句来完成。
- 记:用System.in.read()时,我们在键盘上按下的任何一个键都会被当做是输入值,而scanner不是。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int m=scanner.nextInt();
int n=scanner.nextInt();
int[][] arr=new int[m][n];
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
arr[i][j]=scanner.nextInt();
}
}
int x=scanner.nextInt();
int y=scanner.nextInt();
String string=scanner.next();
char s=string.charAt(0);
int k=scanner.nextInt();
char[] arr2=new char[]{'U','R','D','L'};
for(int i=0;i<k;i++) {
//若蚂蚁在黑格
if(arr[x][y]==1) {
//右转90度
if(getPos(s, arr2)!=3) {
s=arr2[getPos(s, arr2)+1];
}
else {
s=arr2[0];
}
//黑格变白格
arr[x][y]=0;
//向前移一格
if(s=='U')
x=x-1;
else if(s=='R')
y=y+1;
else if(s=='D')
x=x+1;
else
y=y-1;
if(i==k-1)
System.out.println(x+" "+y);
}
//若蚂蚁在白格
else {
//左转90度
if(getPos(s, arr2)!=0) {
s=arr2[getPos(s, arr2)-1];
}
else {
s=arr2[3];
}
//白格变黑格
arr[x][y]=1;
//向前移一格
if(s=='U')
x=x-1;
else if(s=='R')
y=y+1;
else if(s=='D')
x=x+1;
else
y=y-1;
if(i==k-1)
System.out.println(x+" "+y);
}
}
scanner.close();
}
public static int getPos(char s,char[] arr2) {
int pos=0;
for(int i=0;i<arr2.length;i++) {
if(s==arr2[i]) {
pos=i;
break;
}
}
return pos;
}
}