Java ASCII艺术的数字表现
我正试图编写一个程序,将ASCII艺术的数字表示转换为艺术本身 比如说, 3. 2,+,3,* 5,- 1,+,1,- 应提供: 3. ++*** --- +- 显示在艺术和数字表示顶部的数字是文件中显示的行数 下面是我为这个任务编写的代码。文件origin.txt包含ASCII art的数字表示,而目标文件夹应获取art本身Java ASCII艺术的数字表现,java,ascii,Java,Ascii,我正试图编写一个程序,将ASCII艺术的数字表示转换为艺术本身 比如说, 3. 2,+,3,* 5,- 1,+,1,- 应提供: 3. ++*** --- +- 显示在艺术和数字表示顶部的数字是文件中显示的行数 下面是我为这个任务编写的代码。文件origin.txt包含ASCII art的数字表示,而目标文件夹应获取art本身 import java.io import java.util.*; public class Numerical { public static voi
import java.io
import java.util.*;
public class Numerical
{
public static void main(String[]args)
throws FileNotFoundException
{
File input = new File("origin.txt");
File output = new File("destination.txt");
numToImageRep(input,output);
}
public static void numToImageRep(File input, File output)
throws FileNotFoundException
{
Scanner read = new Scanner(input);
PrintStream out = new PrintStream(output);
int size = read.nextInt();
String symbol;
out.println(size);
for(int i = 0; i < size; i++)
{
int x = 0;
symbol = read.next();
while(x < symbol.length())
{
char a = symbol.charAt(x);
int c = Character.getNumericValue(a);
x = x + 2 ;
char L = symbol.charAt(x);
for(int j = 0; j < c; j++)
{
out.print(L);
}
x = x + 2;
}
out.println();
}
}
}
将转化为艺术
但是,
2.
2,5,*
3,9,*
将导致:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.charAt(String.java:646)
at Numerical.numToImageRep(Numerical.java:28)
at Numerical.main(Numerical.java:9)
我不知道为什么会这样。如果有人对我有什么建议,我会非常感激。就像@user2693587所说的,问题可能是在迭代字符串时使用了x+2
更标准的读取输入的方法是使用string.split,并获取需要数字表示的字符数组。问题在于语句:
symbol = read.next();
默认情况下,Scanner类的下一个方法只返回空格之前的内容。所以,当你打电话给read.next的时候
2, ,5,*
它返回字符串2,,这显然会导致越界异常
相反,将该行替换为
symbol = read.nextLine();
它应该可以解决您的问题。您在哪一行得到这个错误?简单的方法是简单地执行ifc!=32基本上,只有当c不是一个空格时,它才起作用。你的代码似乎不起作用,即使是你声称它起作用的输入。选中“已修改”以从控制台获取输入。这有助于,您的问题是在while循环中检查x
symbol = read.nextLine();