我正在编写一个程序,它接收2个字符串,一个输入和输出字符串。输入字符串是文本文件的名称,其中包含有关网格高度和长度,跑步者在网格上的起始位置,然后移动方向以及移动多少空间的说明。我已设法从文本文件中获取网格和起始位置,但是我无法使用说明移动跑步者。这是我的代码:
while(in.hasNext()){
String s = in.nextLine();
int i = 0;
for(String keep : s.split(" ")){
if(i==4){
break;
}
steps[i++] = Integer.parseInt(keep);
}
first++;
if (first>3){
break;
}
}
while(in.hasNext()){
String s = in.nextLine();
String x = in.nextLine();
if(s.equals("N")){
spaces = Integer.parseInt(x);
steps[2] = steps[2]-spaces;
}
else if(s.equals("S")){
spaces = Integer.parseInt(x);
steps[2] = steps[2]+spaces;
}
else if(s.equals("W")){
spaces = Integer.parseInt(x);
steps[3] = steps[3]-spaces;
}
else if(s.equals("E")){
spaces = Integer.parseInt(x);
steps[3] = steps[3]+spaces;
}
if(steps[2]<0||steps[2]>steps[0]){
wrt.println("lost");
wrt.close();
in.close();
return;
}
if(steps[3]<0||steps[3]>steps[1]){
wrt.println("lost");
wrt.close();
in.close();
return;
}
}
wrt.println(steps[2]+ "" + " " + steps[3] + "");
答案 0 :(得分:2)
根据我们在问题评论中的讨论,您需要按照
的方式做一些事情。您的解决方案的问题在于您执行1)和2),然后在3)之前从文件中读取下一行。如果文件中只有一行,则程序结束。
您需要更改数据的读取方式。查看java.util.Scanner,这可能会对您有所帮助。
<强>更新强>
看看代码的这一部分:
if(keep.equals("N")){
spaces = Integer.parseInt(keep);
看到问题?
此外,Scanner
的{{3}}可能对您有所帮助,而不是拆分字符串。
答案 1 :(得分:0)
尝试做这样的事情:
String commands = in.nextLine();
String commandArray[] = commands.split(" ");
height = commandArray[0];
width = commandArray[1];
startingX = commandArray[2];
startingY = commandArray[3];
for(int i=4; i<commandArray.length;i+=2){
spaces = Integer.parseInt(commandArray[i+1]);
switch(commandArray[i]){
case "N":
steps[2] = steps[2]-spaces;
case "S":
steps[2] = steps[2]+spaces;
case "W":
steps[2] = steps[3]-spaces;
case "E":
steps[2] = steps[3]+spaces;
}
}