J2SE论坛网»J2SE技术»各位帮帮忙,关于越界问题
各位帮帮忙,关于越界问题
问?:
public class TestN2C {
String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" };
String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(int a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 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("零")) {
result += "零";
}
}
}
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位整数,而不报这条错误信息??
谢谢
String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" };
String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(int a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 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("零")) {
result += "零";
}
}
}
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位整数,而不报这条错误信息??
谢谢
答!: 1:
public String translate(int a)
改成:
public String translate(long a)
最多2的64次方
要更长的数字就只能用:
public String translate(String a)
改成:
public String translate(long a)
最多2的64次方
要更长的数字就只能用:
public String translate(String a)
答!: 2:
这种情况已经试过了,不行
答!: 3:
改成long 还是报同样的错误
答!: 4:
我认为可能是Integer.parseInt()方法的原因,但是我不知道应该换成其他什么函数
答!: 5:
改成 long 后,再改下面这句:
System.out.println(t.translate(111111111111L));
注意,整数常量的结尾有个大写的 L
System.out.println(t.translate(111111111111L));
注意,整数常量的结尾有个大写的 L
答!: 6:
class TestN2C {
String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" };
String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(long a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 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("零")) {
result += "零";
}
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(111333333311L));
}
}
改成这样后,编译是通过了,但是执行时还是报错
String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" };
String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(long a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 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("零")) {
result += "零";
}
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(111333333311L));
}
}
改成这样后,编译是通过了,但是执行时还是报错
答!: 7:
把Integer.parseInt(l)
改成:
Long.parseLong(l);
改成:
Long.parseLong(l);
答!: 8:
改成Long.parseLong(l) 报出这个错误
可能损失精度
找到: long
需要: int
result += nums[Long.parseLong(l) - 1];
^
1 错误
可能损失精度
找到: long
需要: int
result += nums[Long.parseLong(l) - 1];
^
1 错误
答!: 9:
public class Test {
String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" };
String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(long a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 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("零")) {
result += "零";
}
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.translate(111333333311L));
}
}
我编译了一下出现 这个异常原因是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
at Test.translate(Test.java:21)
at Test.main(Test.java:36)
1。你在开始定义了String 类型的的
String[] units
这里相加当然出错了
result += (units[i]);
String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" };
String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(long a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 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("零")) {
result += "零";
}
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.translate(111333333311L));
}
}
我编译了一下出现 这个异常原因是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
at Test.translate(Test.java:21)
at Test.main(Test.java:36)
1。你在开始定义了String 类型的的
String[] units
这里相加当然出错了
result += (units[i]);
答!: 10:
改为translate(long a)
答!: 11:
public String translate(int a)
System.out.println(t.translate(1111111111));
你难道没看看给的数有没有在INT的范围里???
System.out.println(t.translate(1111111111));
你难道没看看给的数有没有在INT的范围里???
答!: 12:
虽然没有解决问题的办法,但还是谢谢各位了
相关JAVA教程:
proguard 中如何保留所有继承了Serializable 的类
求java操作telnet
达人们帮我看看问题在哪里
每隔1秒鐘就去檢查一個變量,當那變量變為0時,就println(“end”)怎麼寫呢?
java泛型问题
一个多线程的问题
newDialog为什么传递不了数据!SOS!
想利用MVC模式实现一个小程序,遇到了麻烦,高手帮忙看下。在线等
interface 和 Object 的问题
[说难不难的问题]:__FUNCTION__是c++中表示当前函数名的宏,java中又如何 获取当前类和方法 ?
String格式的问题
js 怎样获得td里的值?