java程序:看看我错哪里了

老师留的作业:将小写数字转换成大写且带单位

我的程序

import java.util.Scanner;
import java.util.Arrays;
class Zi{

public static void main(String[] args) {

    char[] zi = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    char[] level = {' ','拾','百','千','万','拾','百','千','亿','拾','百','千'};
    Scanner sc = new Scanner(System.in);
    System.out.println("#");
    String hanzi = sc.next();
    char[] a = hanzi.toCharArray();

    int[] m = new int[a.length];
    char[] n = new char[2*(a.length)];

    for(int i = 0; i < a.length; i++){
        m[i] = a[i] - '0';
    }

    for(int i = 0; i < 2 *(a.length); i += 2){
        n[i] = zi[m[i]];
        n[i + 1] = level[a.length - i] ;
    }

    String output = new String(n);
    System.out.println(output);
}

}

程序可以编译
但运行就会出错 像这样:
d:\code\0331>javac -encoding utf8 Zi.java

d:\code\0331>java Zi
#
112234
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at Zi.main(Zi.java:22)

求大神解答 感激不敬

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
这个错是说你数组越界了
at Zi.main(Zi.java:22)
说明数组越界是第22行导致的,你再看看?

什么专业大几?怎么现在大学都开java 课程了?

数组越界,这网上一搜一大堆

你代码粘过来的时候行数和原来的不一样了,错误在第19行,就是那个n[i+1]越界了

很明显报的错是数组越界,在你的第2个循环里,n[i+1]是越界无疑了,这在排序和交换中是比较容易犯得错

数组越界,提示你了,看看你的循环条件,或者自己调试下

我断点调试了下,你的for循环设置m[i]的边界条件错误了,修正如下:

 for (int i = 0; i < 2 * (a.length)&&i<m.length; i += 2) {
            n[i] = zi[m[i]];
            n[i + 1] = level[a.length - i];
        }

因为你访问了m[i]所以,i必须是在m数组的范围内才行。运行结果为:壹百贰万叁百

修改后的代码如下,测试通过:

import java.util.Scanner;

public class Zi {
    public static void main(String[] args) {

        char[] zi = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
        char[] level = { ' ', '拾', '百', '千', '万', '拾', '百', '千', '亿', '拾', '百', '千' };
        Scanner sc = new Scanner(System.in);
        System.out.println("#");
        String hanzi = sc.next();
        char[] a = hanzi.toCharArray();

        int[] m = new int[(a.length)];
        char[] n = new char[2 * (a.length)];

        for (int i = 0; i < a.length; i++) {
            m[i] = a[i] - '0';
        }

        int j = 0;  //m,level这两个数组索引变化和n数组索引变化不相同,为清晰起见,另设一个变量j。
        for (int i = 0; i < 2 * (a.length) - 1; i += 2) {

            n[i] = zi[m[j]];
            n[i + 1] = level[a.length - j - 1];
            j += 1;
        }

        String output = new String(n);
        System.out.println(output);
        sc.close();
    }

}

图片说明

数组越界,就错误代码运行后

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at testBL.tset11.main(tset11.java:26)

.ArrayIndexOutOfBoundsException     记住这个就好了