浏览文件

时间:2016-03-26 23:57:37

标签: java loops

我正在编写一个程序,它接收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] + "");

2 个答案:

答案 0 :(得分:2)

根据我们在问题评论中的讨论,您需要按照

的方式做一些事情。
  1. 从文件中读取一行
  2. 阅读该行的前四个数字
  3. 从该行读取下一个字符和数字,并用它做一些事情
  4. 返回3),直到没有更多的行。
  5. 返回1),直到没有更多文件。
  6. 您的解决方案的问题在于您执行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;
        }
     }