【发布时间】:2017-03-08 17:55:46
【问题描述】:
我是 Java 的新手,我正在实现一个简单的函数来将 Leetcode 上的字符串转换为整数。
public int myAtoi(String str) {
if(str.length() == 0){
return 0;
}
str = str.trim();
int n = str.length();
int signal = 0;
if(n == 1 && str.equals("+") || str.equals("-")){
return 0;
}
if(str.charAt(0) == '+'){
signal = 1;
}else if(str.charAt(0) == '-'){
signal = -1;
}
int i = (signal != 0)? 1 : 0;
if(signal == 0){
signal = 1;//default
}
int res = 0;
while(i < n){
char c = str.charAt(i);
if(!Character.isDigit(c)){
return res * signal;
}
//res = res * 10 + c - '0';
if(signal * res > Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
if(signal * res < Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}
res = res * 10 + c - '0';
++i;
}
return res * signal;
}
我知道 java 整数有 MAX_VALUE 的 2147483647。当我的输入是2147483648 时,输出应该是2147483647 但实际上它是-214748648。我真的不知道这里出了什么问题。谁能帮我理解这个?
【问题讨论】:
-
整数容量溢出时会发生这种情况:en.wikipedia.org/wiki/Integer_overflow
标签: java integer-overflow