下一个代码应该将一个字符串作为输入,并计算其中的每个数字(例如,我吃了 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)
你的方法很好。您的 IndexOutOfRange 问题是因为您将
while
条件设置为小于或等于单词的长度。
示例:
String a = "Apple";
a.charAt(4)
是 'e'
a.length()
是 5
if (Character.isDigit(word.charAt(i))) {
sum += Character.getNumericValue(word.charAt(i));
}