3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于您可以使用 charAt(),您可以自行轉(zhuǎn)換字符串:
// 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;
然后你可以用這個(gè)數(shù)字來(lái)計(jì)算。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
您提到某些情況不起作用,您不確定為什么。我認(rèn)為這與您的 if 語(yǔ)句有關(guān)。
例如第一個(gè) if 在第一個(gè)循環(huán)中:
if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {...}
將在與 else 完全相同的情況下評(píng)估為真,如果緊隨其后:
else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {...}
(因?yàn)樵诘谝环N情況下,您首先評(píng)估任一值是否等于零,然后反轉(zhuǎn)結(jié)果)。
然后第一個(gè)嵌套 if 在第一個(gè)循環(huán)中:
if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) {...}
在我看來(lái),這將始終評(píng)估為真,因?yàn)槟皇菑膬蓚€(gè)字符串中取出一個(gè)字符。所以加法可能的最高結(jié)果是 18。從它減去 96,它肯定會(huì)小于 10。
為了調(diào)試它并找到問(wèn)題,我建議您首先仔細(xì)檢查所有 if 語(yǔ)句。在評(píng)論中寫(xiě)下,甚至制作一個(gè)圖表來(lái)確定何時(shí)應(yīng)該達(dá)到某個(gè)步驟以及在那里應(yīng)該發(fā)生什么。此外,如果您還沒(méi)有使用可能有幫助的 IDE,因?yàn)樗鼤?huì)提醒您注意邏輯中的一些問(wèn)題。

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
這行得通嗎?
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();
}
添加回答
舉報(bào)