溢出:因为我们的int的范围为Integer.MIN_VALUE ~ Integer.MAX_VALUE所以,我们在判断的时候,if (sum > dny || sum == dny && c[i] > '8') { return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; }此处的dny == Integer.MAX_VALUE/10
最后返回sum与标记位的乘积
3. 题目代码
publicintStrToInt(String str){if(str.length()==0){return0;}char[] c = str.trim().toCharArray();// 去除空格if(c.length ==0){return0;}// 判断第一个符号位是int flag =1;int num =1;// 我们判断第一个字符 是不是‘+’ ‘-’ 如果是的话 我们从下标1开始遍历// 如果不是,我们从下标0开始遍历if(c[0]=='-'){
flag =-1;}elseif(c[0]!='+'){
num =0;}int sum =0;int dny = Integer.MAX_VALUE /10;for(int i = num; i < c.length; i++){// 也就是如果其中出现了非数字的数,我们直接判断这是一个无效输出// 返回0if(c[i]<'0'|| c[i]>'9'){return0;}if(sum > dny || sum == dny && c[i]>'8'){return flag ==1? Integer.MAX_VALUE : Integer.MIN_VALUE;}
sum = sum *10+(c[i]-'0');}return sum * flag;}