ParseInt方法的实现

描述

这个问题来自1到4班Java第二次实验第2题,周围有好多同学一看到需求比较迷茫,所以写了这个短文(卖萌)。

  • 静态方法parseInt(char[])将数字字符构成的数组转换为一个int值。
  • 静态方法parseInt(String)将字符串转换为一个int值。
分析

先说Stringint,我们不能把一个String分开来单独处理每一位(而char[]就能轻易地做到),所以,需要调用String的方法toCharArray()处理。

那么对于一个char[]来说,我们需要逆序读取这个线性列表的每一个元素,然后考虑位上的权值,一股脑地加进需要求得的总和。

例如'12345',是由1 * 10000 + 2 * 1000 + 3 * 100 + 4 * 10 + 5 * 1组成的。考虑到这里,我们需要两个计数器solve求得结果以及right计算权值。

另外,由于是倒序处理,我们还要知道数组的长度也就是array.length,但是如果你用这个数直接循环,会得到栈溢出的错误。(错误提示如下)

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: **
at MyInteger.parseInt(MyInteger.java:**)
at MyInteger.main(MyInteger.java:**)

这是因为,角标都是从0数的嘛,所以你要用长度减1。(高手请忽略我上面几行的卖ke萌pu)

代码及解释

所以,parseInt(char[])的实现如下:

 Java Code 
public static int parseInt(char[] array) {

    
int right = 1;

    
int solve = 0;

    
for (int i = array.length - 1; i >= 0; --i) {

        solve = solve + right * ((
int)array[i] - 48);

        right *= 
10;

    }

    
return solve;

}


你可能注意到,(int)array[i]减了48,至于这是为什么,你可以把减48去掉,然后输出结果查看一下。

parseInt(String)的实现,可以用已经写好的上面的方法偷懒:

 Java Code 
public static int parseInt(String str) {

    
char[] array = str.toCharArray();

    
return parseInt(array);

}

总结

其实我从来没有写过这么科普向的解题报告,所以Java的实验真的很水,很水……

ZHRMoe Studio 4/8/2015.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

52 − = 48