为了账号安全,请及时绑定邮箱和手机立即绑定

字符串加减法程序

字符串加减法程序

浮云间 2021-12-01 19:07:21
我写了一个程序,我想对字符串进行加减运算,其中所有字符串的长度都是四,看起来像“+002”、“+569”、“-022”、“-789”等。我已经尝试在不使用任何乘法、除法或余数的情况下执行此操作,但仅使用加法和减法作为运算,但我的问题是某些情况还不起作用,我不明白为什么或如何解决它因为用这么长的代码很难看清问题究竟出在哪里以及我应该改变什么。所以这里是相关的方法:public static String add(String s1, String s2) {        int number;        int[] s = new int[4];        String result = "";        if (s1.contains("+") && s2.contains("+")) {            result = "+";            for (int i = 1; i < s1.length(); ++i) {                if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {                    if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;                    else {                        s[i] = (s1.charAt(i)) + (int) (s2.charAt(i)) - 106;                    ++s[i - 1];                    }                }                else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {                    s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;                }            }        }        else if (s1.contains("-") && s1.contains("-")) {            result = "-";            for (int i = 1; i < s1.length(); ++i) {                if ((!(s1.charAt(i) == 0 || s2.charAt(i) == 0))) {                    if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;                    else {                        s[i] = (s1.charAt(i)) + (int) (s2.charAt(i)) - 106;                    ++s[i - 1];                    }                }                else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {                    s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;                }            }        }
查看完整描述

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;

然后你可以用这个数字来计算。


查看完整回答
反对 回复 2021-12-01
?
暮色呼如

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,因为它会提醒您注意逻辑中的一些问题。


查看完整回答
反对 回复 2021-12-01
?
慕沐林林

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();

}


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信