为了账号安全,请及时绑定邮箱和手机立即绑定

扫描仪未按预期计算空格

扫描仪未按预期计算空格

德玛西亚99 2021-08-25 17:24:00
我目前正在尝试使用扫描仪为推箱子游戏创建求解器,我现在遇到的问题是我的扫描仪没有按预期工作,我通常有一个文本文件,看起来像这样:## ###### ###### #####当我尝试使用我的代码时,我想扫描每个字符,包括空格,保存它们,创建一个二维数组,把它们放在那里,这是我的第一步。问题是我的扫描仪没有像我希望的那样工作,我使用以下行:sc.useDelimiter("s*");这是我对空格计数的尝试,似乎确实如此,问题只是它每次进入空格时都会切换行。我的代码现在看起来像:    package soko;    import java.util.*;    import java.io.*;    public class Dowork {        File file;        Scanner sc;        char a;        static int lines;        Scanner lineScanner;        static int maxChar;        ArrayList array;        char[][] array2;        Scanner bc;        int n;        int m;        static int lines2;    public Dowork() throws Exception{        //lines += 1;        file = new File("C:/Users/joaki/Desktop/sokoban/readin.txt");        sc = new Scanner(file);        bc = new Scanner(file);        sc.reset();        bc.reset();        sc.useDelimiter("s*");        ArrayList<Character> array = new ArrayList<Character>();        while(sc.hasNext()) {            String line = sc.next();            if(maxChar <= line.length()) {                maxChar = line.length();            }            for (char ch:line.toCharArray()) {                array.add(ch);            }            if(sc.hasNextLine()) {                lines++;            }        }        sc.close();        while(bc.hasNextLine()) {            lines2++;        }        bc.close();        array2 = new char[lines][maxChar];        Iterator<Character> itemIterator = array.iterator();            while(itemIterator.hasNext()) {                itemIterator.next();                for (int q = 0; q < lines; q++) {                    for(int r = 0; r < maxChar; r++) {                        Character j = itemIterator.next();                        array2[q][r] = j;                    }                }            }举个例子,当我使用具有以下内容的 txt 文件时:#########   # .##   $$.#####   #   #@ ##   ####它数到 56 行,显然不应该是 56。我哪里做错了?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

要记住的主要编程规则之一:保持简单


在这一点上,为什么不简单地使用一个普通的扫描仪,一个没有改变分隔符的扫描仪,并使用它来获取文件中的行和行。然后,您可以根据需要处理行,例如转换为字符数组,或者在需要时使用自己的行扫描仪解析它。


List<String> lines = new ArrayList<>();

while (sc.hasNextLine()) {

    lines.add(sc.nextLine());

}


array2 = new char[lines.size()][];

for (int i = 0; i < array2.length; i++) {

    array2[i] = lines.get(i).toCharArray();

}

例如:


import java.io.InputStream;

import java.util.ArrayList;

import java.util.Formatter;

import java.util.List;

import java.util.Scanner;


public class DoWork2 {

    // assuming data in data.txt file in same path as class files

    private static final String RESRC_PATH = "data.txt";

    private char[][] array2;


    public DoWork2(String resrcPath) {

        InputStream is = getClass().getResourceAsStream(resrcPath);

        Scanner sc = new Scanner(is);

        List<String> lines = new ArrayList<>();

        while (sc.hasNextLine()) {

            lines.add(sc.nextLine());

        }


        array2 = new char[lines.size()][];

        for (int i = 0; i < array2.length; i++) {

            array2[i] = lines.get(i).toCharArray();

        }

        if (sc != null) {

            sc.close();

        }

    }


    public String getLines2() {

        StringBuilder sb = new StringBuilder();

        Formatter formatter = new Formatter(sb);

        for (char[] cs : array2) {

            formatter.format("%s%n", new String(cs));

        }

        formatter.close();

        return sb.toString();

    }


    public static void main(String[] args) {

        DoWork2 doWork2 = new DoWork2(RESRC_PATH);

        System.out.println(doWork2.getLines2());

    }


}


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信