计算字符串中的数字

问题描述 投票:0回答:1

下一个代码应该将一个字符串作为输入,并计算其中的每个数字(例如,我吃了 2 个苹果和 3 个橙子),这应该将 5 显示为 (2+3 = 5)

这是我的代码:

import java.util.*;
public class SumOfDigits {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("enter a word: ");
        String word = sc.nextLine();
        int result = Sum(word);
        System.out.println(result);
    }

    public static int Sum(String word) {
        int i = 0;
        int sum = 0;
        while (i <= word.length()) {
            if (word.charAt(i) > 0 && word.charAt(i) < 9) {
                sum += word.charAt(i);
            }
            i++;
        }
        return sum;
    }
}

错误是:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
    at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
    at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
    at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
    at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
    at java.base/java.lang.String.checkIndex(String.java:4575)
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)
    at java.base/java.lang.String.charAt(String.java:1535)
    at SumOfDigits.Sum(SumOfDigits.java:15)
    at SumOfDigits.main(SumOfDigits.java:7)
java sum
1个回答
0
投票

你的方法很好。您的 IndexOutOfRange 问题是因为您将

while
条件设置为小于或等于单词的长度。

示例:

String a = "Apple";

a.charAt(4)
'e'

a.length()
5


你的if条件也是错误的,你需要检查当前字符是否是数字。 你可以通过这样做来修复它
if (Character.isDigit(word.charAt(i))) {
  sum += Character.getNumericValue(word.charAt(i));  
}
© www.soinside.com 2019 - 2024. All rights reserved.