gpt4 book ai didi

java - 扫描仪未按预期计算空白

转载 作者:行者123 更新时间:2023-11-30 02:03:14 24 4
gpt4 key购买 nike

我目前正在尝试使用扫描仪为推箱子游戏创建解算器,我现在遇到的问题是我的扫描仪无法按预期工作,我通常有一个文本文件看起来接近类似的内容这个:

## ###### #
##### #####

当我尝试使用我的代码时,我想扫描每个字符,包括空格,保存它们,创建一个二维数组,将它们放在那里,这是我的第一步。问题是我的扫描仪没有像我希望的那样工作,我使用以下行:

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;

}
}

}
for (int q = 0; q < lines; q++) {
for(int r = 0; r < maxChar; r++) {
System.out.println(array2[q][r]);
}
}


}


public static void main(String[] args) throws Exception{
Dowork g = new Dowork();
System.out.println(lines2);

}
}

举个例子,当我使用包含以下内容的txt文件时:

########
# # .#
# $$.#
#### #
#@ ##
####

它计算出的行数为56,显然不应该是56。我哪里做错了?

最佳答案

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

关于这一点,为什么不简单地使用一个普通的扫描仪(其分隔符尚未更改),并使用它从文件中获取行且仅获取行。然后,您可以根据需要对行进行处理,例如转换为字符数组,或者如果需要,可以使用自己的行扫描器对其进行解析。

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());
}

}

关于java - 扫描仪未按预期计算空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com