在CSDN首页上看到一个题,看着觉得很简单,就来做着试试看。结果提交以后提示挑战失败!!!
天理何在,给的测试用例全部能通过呀!囧。。。
下面附上我的实现代码吧,有点暴力,我想用Java正则表达式会好一些,可惜我现在还不怎么会。。
import java.util.Scanner;
public class GlobalMembers
{
public static int StrToInt(String str)
{
//我认为本题用正则表达式做更佳,可惜我不会用Java正则表达式。
int result = 0;
int flag = 0; //存储读到+和-的总次数,超过两次退出循环。
int sign = 1; //存储result的符号。1代表正号,-1代表负号
boolean rangeOutFlag = false; //存储数字越界的信号。
boolean read = false; //在读到非空字符时,read置为true。
for(int i=0; i
switch(str.charAt(i)){
case '0':
result = result*10;
read = true;
break;
case '1':
result = result*10 + 1;
read = true;
break;
case '2':
result = result*10 + 2;
read = true;
break;
case '3':
result = result*10 + 3;
read = true;
break;
case '4':
result = result*10 + 4;
read = true;
break;
case '5':
result = result*10 + 5;
read = true;
break;
case '6':
result = result*10 + 6;
read = true;
break;
case '7':
result = result*10 + 7;
read = true;
break;
case '8':
result = result*10 + 8;
read = true;
break;
case '9':
result = result*10 + 9;
read = true;
break;
case '+':
if(read==true){
return result;
} else {
if(flag++!=0){
return 0;
}
}
read = true;
break;
case '-':
if(read==true){
return result;
} else {
if(flag++!=0){
return 0;
} else {
sign = -sign;
}
}
read = true;
break;
case ' ':
if(read==true){
return sign*result;
}
break;
default:
return sign*result;
}
if (rangeOutFlag==true) {
return sign*result;
}
else if (result==214748364 && (i+1)
switch(str.charAt(i+1)){
case '8':
case '9':
if (sign==1) {
return 2147483647;
} else if (sign==-1) {
return -2147483648;
}
}
rangeOutFlag = true;
} else if (result>214748364 && (i+1)
switch(str.charAt(i+1)){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (sign==1) {
return 2147483647;
} else if (sign==-1) {
return -2147483648;
}
}
rangeOutFlag = true;
}
}
return sign*result;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
@SuppressWarnings("resource")
public static void main(String args[])
{
while(true){
Scanner in = new Scanner(System.in);
String str = in.next();
if(str.equals("exit")){ //如果读到exit,退出循环
break;
}
int integer = StrToInt(str);
System.out.println(integer);
}
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
}