Java ASCII艺术的数字表现

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

我正试图编写一个程序,将ASCII艺术的数字表示转换为艺术本身

比如说,

3. 2,+,3,* 5,- 1,+,1,- 应提供:

3. ++*** --- +- 显示在艺术和数字表示顶部的数字是文件中显示的行数

下面是我为这个任务编写的代码。文件origin.txt包含ASCII art的数字表示,而目标文件夹应获取art本身

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循环中检查xsymbol = read.nextLine();