题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。
本题目不是很难,但有几个注意事项
1.要判断输入字符串是否有效,即判断输入字符串是否为空和判断字符串中有没有其他非数字的字符
2.判断字符串开头是否带有符号,例如输入“+123”,结果为“123”,输入“-123”,结果为“-123”
3.输入正常时,开始计算,还是以"345"作为例子。当我们扫描到字符串的第一个字符'3'时,我们不知道后面还有多少位,仅仅知道这是第一位,因此此时得到的数字是3。当扫描到第二个数字'4'时,此时我们已经知道前面已经一个3了,再在后面加上一个数字4,那前面的3相当于30,因此得到的数字是3*10+4=34。接着我们又扫描到字符'5',我们已经知道了'5'的前面已经有了34,由于后面要加上一个5,前面的34就相当于340了,因此得到的数字就是34*10+5=345。因此,计算思路是,每扫描一个字符,将之前得到的结果乘以10加上当前扫描字符表示的数字。
4.函数返回值为boolean表示输入是否合法,用一个static变量来存放结果
5.由于输入为字符串,因此可能存在溢出问题,所以用long型来存放结果
参考网址:http://zhedahht.blog.163.com/blog/static/25411174200731139971/
public class Test_17 {
static long result = 0;
public static void main(String[] args) {
String str = "+1234564564455665";
if (strToint(str) == false) {
System.out.println("输入不合法");
return;
}
System.out.println(result);
}
public static boolean strToint(String str) {
// int result = 0;
if (str == null) {
return false;// 输入无效
}
int signal = 1;
// 判断是否有符号
if (str.charAt(0) == '-' || str.charAt(0) == '+') {
for (int i = 1; i < str.length(); i++) {
// 判断是否有非数字的输入
if (str.charAt(i) < '0' || str.charAt(i) > '9')
return false;
result = result * 10 + (str.charAt(i) - '0');
}
if (str.charAt(0) == '-')
result = 0 - result;
} else {
for (int i = 0; i < str.length(); i++) {
// 判断是否有非数字的输入
if (str.charAt(i) < '0' || str.charAt(i) > '9')
return false;
result = result * 10 + (str.charAt(i) - '0');
}
}
return true;
}
}