在输入数字之后,我想把输入的字符数组转换为整数,但是这部分的程序报错了,怎么修改呢?
你调试下,看看获得的str到底是什么。是不是根本不是这个框,或者里面有别的符号、空格。注意是整数,不能是小数。
1.缓存库存信息
由于大部分数据读取请求都被 Redis 挡住了,保护了MySQL
2.检查 Redis 库存和扣减
Redis 库存是两步操作,通过Lua脚本将这两步操作,合并成一个整体,保证原子操作性
3.MySQL复检
哪怕 Redis 侧方行,可以创建订单了,到 MySQL 的时候也需要再检查一次
这个问题是关于如何把字符串转换成整数,可以通过Integer.valueOf()方法来实现,如果该字符串不是一个数字字符串,则会抛出一个NumberFormatException异常。
示例代码如下:
public static int string2Int(String s) {
int res = 0, sign = 1, i = 0, n = s.length();
if (s.charAt(i) == '-') {sign = -1;i++;}
if (s.charAt(i) == '+') {sign = 1;i++;}
for (; i < n; i++) {
if (s.charAt(i) < '0' || s.charAt(i) > '9') {
throw new NumberFormatException("Invalid input string: " + s);
}
res = res * 10 + (s.charAt(i) - '0');
}
return sign * res;
}
这个示例代码中,我们首先处理符号位,并初始化res和i等局部变量,然后遍历给定的字符串,如果该字符串中存在非数字字符,则抛出一个NumberFormatException异常,否则,我们继续计算res的值即可。
为了处理符号,我们使用了一个sign的整数变量(1或-1),也就是说,如果该字符串的第一个字符是'-',则设置sign为-1,否则设置为1。
另外,如果该字符串前缀为'+',我们可以忽略它。
示例代码,用于测试:
public static void main(String[] args) {
String[] ss = {"100", "-123", "+123", "abc", "0", "100000000000000000000", "2147483647", "-2147483648"};
for (String s : ss) {
try {
int res = string2Int(s);
System.out.println(s + " => " + res);
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
}
}
输出:
100 => 100
-123 => -123
+123 => 123
Invalid input string: abc
0 => 0
100000000000000000000 => Invalid input string: 100000000000000000000
2147483647 => 2147483647
-2147483648 => -2147483648