将一个字符串转换成一个整数,字符串不是一个合法的数值则返回 0,要求不能使用字符串转换整数的库函数。java
Iuput: +2147483647 1a33 Output: 2147483647 0
这看起来是很简单的题目,实现基本功能 ,大部分人都能用10行以内的代码解决。但是,当咱们要把不少特殊状况即测试用例都考虑进去,却不是件容易的事。解决数值转换问题自己并不难,但我但愿在写转换数值的代码以前,应聘者至少能把空指针,空字符串”“,正负号,溢出等方方面面的测试用例都考虑到,而且在写代码的时候对这些特殊的输入都定义好合理的输出。固然,这些输出并不必定要和atoi彻底保持一致,但必需要有显式的说明,和面试官沟通好。面试
这个应聘者最大的问题就是尚未养成在写代码以前考虑全部可能的测试用例的习惯,逻辑不够严谨,所以一开始的代码只处理了最基本的数值转换。后来我每次提醒他一处特殊的测试用例以后,他改一处代码。尽管他已经作了两次修改,但仍然有很多很明显的漏洞,特殊输入空字符串”“,边界条件好比最大的正整数与最小的负整数等。因为这道题思路自己不难,所以我但愿他把问题考虑得很可能周到,代码尽可能写完整。函数
public int StrToInt(String str) { if (str == null || str.length() == 0) //判空 return 0; boolean isNegative = str.charAt(0) == '-'; //判断是否是负数 int ret = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (i == 0 && (c == '+' || c == '-')) /* 符号断定 */ continue; if (c < '0' || c > '9') /* 非法输入 */ return 0; ret = ret * 10 + (c - '0'); } return isNegative ? -ret : ret; }