老师留的作业:将小写数字转换成大写且带单位
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 记住这个就好了