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位整数,而不报这条错误信息??
谢谢

解决方案 »

  1.   

    public String translate(int a)
    改成:
     public String translate(long a)
     最多2的64次方要更长的数字就只能用:
     public String translate(String a)
      

  2.   

    改成long 还是报同样的错误
      

  3.   

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

  4.   

    改成 long 后,再改下面这句:
        System.out.println(t.translate(111111111111L));注意,整数常量的结尾有个大写的 L
      

  5.   

    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));
     }}改成这样后,编译是通过了,但是执行时还是报错
      

  6.   

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

  7.   

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

  8.   

    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]);
      

  9.   

    public String translate(int a)
     System.out.println(t.translate(1111111111));你难道没看看给的数有没有在INT的范围里???