【问题标题】:Convert string to int and get sum of numbers将字符串转换为 int 并获取数字的总和
【发布时间】:2016-02-11 03:39:42
【问题描述】:

当我测试这段代码时,它总是返回 0,我不知道为什么。

public class test {
    public int sumOfDigits(String s) {
        int sum = 0;
        for (int i=0; i<s.length(); i++) {
            char cur = s.charAt(i);

            if (cur >= 0 && cur <= 9) {
                sum += cur - '0';
            }
        }

        return sum;
    }
}

【问题讨论】:

  • if (cur &gt;= 0 &amp;&amp; cur &lt;= 9) 更改为 if (cur &gt;= '0' &amp;&amp; cur &lt;= '9')

标签: java string char int


【解决方案1】:

您几乎拥有它,但您的问题是您需要从所有使用cur 作为数字的地方减去'0'。解决此问题的最简单方法是在首次分配 cur 时减去 '0'

public class test {

    public int sumOfDigits(String s){
        int sum = 0;
        for(int i=0; i<s.length(); i++){
            char cur = (char)(s.charAt(i) - '0'); //Java autocasts to int when you subtract

            if (cur >= 0 && cur <= 9){
                sum += cur;
            }
        }


        return sum;

    }

}

如果您不想破坏cur 的实际字符值,也可以在使用cur 的任何地方添加- '0'

if ((cur - '0') >= 0 && (cur - '0') <= 9){
    sum += (cur - '0');
}

【讨论】:

  • 是的,当我输入我的答案时,您的答案与投射无关。发布我的答案后,我看到了。这意味着您在我输入答案时已对其进行了编辑。无论如何,我会删除我的答案,因为你是第一个提出答案的人祝你好运
【解决方案2】:

这是我的方法:我打破字符串并将其存储在数组部分中。然后将每段字符串转换为整数,然后将它们相加。请问我是否有任何不合理的地方。谢谢

public int sumOfDigits(String s){
String[] parts = s.split("");
    int sum = 0;
    for(int i=0; i < parts.length; i++){
        sum = sum + Integer.parseInt(parts[i]);           
    }
    return sum;
}

【讨论】:

    【解决方案3】:

    你可以很简单地做到这一点:

    public int sumOfDigits(String s) {
        int sum = -1;
        try {
            int n = Integer.parseInt(s);
            sum = 0;
            while(n!=0) {
                sum = sum + n % 10;
                n = n / 10;
            }
        }
        catch (NumberFormatException nfe) {
            System.out.println(nfe);
            System.out.println("Given string is not a number!");
        }
        return sum;
    }
    

    由于数字的总和永远不会是负数,因此当输入为非数字字符串时返回-1。

    【讨论】:

    • 如果字符串中有任何非数字字符,这不起作用
    • @River 具有非数字字符的字符串首先不是数字,将其视为数字是另一个错误。 OP 在标题中提到 Convert string to int。是的,它“不起作用”,但只有它“不起作用”。无论如何,我已经编辑使它工作:-)
    • 我曾假设问题标题中的“获取数字总和”暗示输入字符串包含数字的字符。 (这也暗示了 OP 的代码没有因非数字输入而失败。)但是,您提出了一个很好的观点,即“将字符串转换为 int”确实暗示了相反的情况。 (而且我可能会将“暗示”归因于懒惰的编码。)无论如何,我将删除我的反对意见,并让我的评论警告那些希望能够处理非数字字符的人远离这个答案。
    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2013-07-20
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多