3 回答
TA贡献1799条经验 获得超9个赞
由于您可以使用 charAt(),您可以自行转换字符串:
// String s1 = "+123";
int d1 = (s1.charAt(1) - '0') * 100;
int d2 = (s1.charAt(2) - '0') * 10;
int d3 = (s1.charAt(3) - '0');
int num = d1 + d2 + d3;
然后你可以用这个数字来计算。
TA贡献1853条经验 获得超9个赞
您提到某些情况不起作用,您不确定为什么。我认为这与您的 if 语句有关。
例如第一个 if 在第一个循环中:
if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {...}
将在与 else 完全相同的情况下评估为真,如果紧随其后:
else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {...}
(因为在第一种情况下,您首先评估任一值是否等于零,然后反转结果)。
然后第一个嵌套 if 在第一个循环中:
if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) {...}
在我看来,这将始终评估为真,因为您只是从两个字符串中取出一个字符。所以加法可能的最高结果是 18。从它减去 96,它肯定会小于 10。
为了调试它并找到问题,我建议您首先仔细检查所有 if 语句。在评论中写下,甚至制作一个图表来确定何时应该达到某个步骤以及在那里应该发生什么。此外,如果您还没有使用可能有帮助的 IDE,因为它会提醒您注意逻辑中的一些问题。
TA贡献2016条经验 获得超9个赞
这行得通吗?
private static String add(String s1, String s2) {
return intToString(stringToInt(s1) + stringToInt(s2));
}
private static int stringToInt(String string) {
int multiplicand;
int i = 0;
multiplicand = string.charAt(0) == '+' ? 1 : -1;
i += (string.charAt(1) - '0') * 100;
i += (string.charAt(2) - '0') * 10;
i += (string.charAt(3) - '0');
return i * multiplicand;
}
private static String intToString(int i) {
StringBuilder sb = new StringBuilder();
sb.append(i >= 0 ? "+" : "-");
i = Math.abs(i);
sb.append(i / 100);
sb.append(i / 10 - (i / 100 * 10));
sb.append(i - (i / 10 * 10));
return sb.toString();
}
添加回答
举报