站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题各位帮帮忙,关于越界问题

各位帮帮忙,关于越界问题

摘要: 各位帮帮忙,关于越界问题


public class TestN2C {

String[] units = { -#34;-#34;, -#34;十-#34;, -#34;百-#34;, -#34;千-#34;, -#34;万-#34;, -#34;十-#34;, -#34;百-#34;, -#34;千-#34;, -#34;亿-#34; };

String[] nums = { -#34;一-#34;, -#34;二-#34;, -#34;三-#34;, -#34;四-#34;, -#34;五-#34;, -#34;六-#34;, -#34;七-#34;, -#34;八-#34;, -#34;九-#34;, -#34;十-#34; };
public String translate(int a) {
String result = -#34;-#34;;
if (a -#60; 0) {
result = -#34;负-#34;;
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i -#62;= 0; i--) {
int r = (int) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith(-#34;零-#34;)) {
result += -#34;零-#34;;
}
}
}
return result;
}
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(1111111111));
}
}

----------------------------------------
过大的整数: 111111111111
System.out.println(t.translate(111111111111));
^
1 错误


请问我如何修改才能使此处输入超过17位整数,而不报这条错误信息??
谢谢



public String translate(int a)
改成:
public String translate(long a)
最多2的64次方

要更长的数字就只能用:
public String translate(String a)


这种情况已经试过了,不行


改成long 还是报同样的错误


我认为可能是Integer.parseInt()方法的原因,但是我不知道应该换成其他什么函数


改成 long 后,再改下面这句:
System.out.println(t.translate(111111111111L));

注意,整数常量的结尾有个大写的 L


class TestN2C {

String[] units = { -#34;-#34;, -#34;十-#34;, -#34;百-#34;, -#34;千-#34;, -#34;万-#34;, -#34;十-#34;, -#34;百-#34;, -#34;千-#34;, -#34;亿-#34; };

String[] nums = { -#34;一-#34;, -#34;二-#34;, -#34;三-#34;, -#34;四-#34;, -#34;五-#34;, -#34;六-#34;, -#34;七-#34;, -#34;八-#34;, -#34;九-#34;, -#34;十-#34; };


public String translate(long a) {
String result = -#34;-#34;;
if (a -#60; 0) {
result = -#34;负-#34;;
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i -#62;= 0; i--) {
long r = (long) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith(-#34;零-#34;)) {
result += -#34;零-#34;;
}
}
}
return result;
}

/**
* @param args
*/
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(111333333311L));
}

}

改成这样后,编译是通过了,但是执行时还是报错


把Integer.parseInt(l)
改成:
Long.parseLong(l);


改成Long.parseLong(l) 报出这个错误

可能损失精度
找到: long
需要: int
result += nums[Long.parseLong(l) - 1];
^
1 错误



public class Test {

String[] units = { -#34;-#34;, -#34;十-#34;, -#34;百-#34;, -#34;千-#34;, -#34;万-#34;, -#34;十-#34;, -#34;百-#34;, -#34;千-#34;, -#34;亿-#34; };

String[] nums = { -#34;一-#34;, -#34;二-#34;, -#34;三-#34;, -#34;四-#34;, -#34;五-#34;, -#34;六-#34;, -#34;七-#34;, -#34;八-#34;, -#34;九-#34;, -#34;十-#34; };


public String translate(long a) {
String result = -#34;-#34;;
if (a -#60; 0) {
result = -#34;负-#34;;
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i -#62;= 0; i--) {
long r = (long) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith(-#34;零-#34;)) {
result += -#34;零-#34;;
}
}
}
return result;
}

/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.translate(111333333311L));
}

}

我编译了一下出现 这个异常原因是
Exception in thread -#34;main-#34; java.lang.ArrayIndexOutOfBoundsException: 11
at Test.translate(Test.java:21)
at Test.main(Test.java:36)
1。你在开始定义了String 类型的的
String[] units
这里相加当然出错了
result += (units[i]);


改为translate(long a)


public String translate(int a)
System.out.println(t.translate(1111111111));

你难道没看看给的数有没有在INT的范围里???


虽然没有解决问题的办法,但还是谢谢各位了


↑返回目录
前一篇: 我想把一个arraylist 类型的array 里的东西都转放到一个 list ,怎么办啊??
后一篇: JDBC连接本机sql server的问题