3 java stringbuilder biginteger
我正在编写一个程序来计算:
1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + 1000 ^ 1000 =?
一旦计算完毕,我想删除除最后十位数之外的答案中的所有数字,然后在屏幕上打印最后十位数字.但是,要删除我使用该StringBuilder.deleteCharAt()方法的所有其他数字,这会导致一些问题.我在下面提供了我的代码:
import java.math.BigInteger;
public class problemFourtyEight {
public static void main(String [] args) {
BigInteger answer = new BigInteger(""+0);
for(int i = 0; i <= 1000; i++) {
BigInteger temp = new BigInteger(""+i);
temp = temp.pow(i);
answer = answer.add(temp);
}
System.out.println(answer.toString().length());
StringBuilder sb = new StringBuilder((answer.toString()));
for(int k = 0; k <= (answer.toString().length() - 10); k++) {
sb.deleteCharAt(k); //Line 13 is here.
}
String finalAnswer = sb.toString();
System.out.println(finalAnswer);
}
}
Run Code Online (Sandbox Code Playgroud)
抛出的异常是:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1501
at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:797)
at java.lang.StringBuilder.deleteCharAt(StringBuilder.java:253)
at problemFourtyEight.main(problemFourtyEight.java:13)
Run Code Online (Sandbox Code Playgroud)
从打印出答案的长度(删除任何字符之前),它告诉我数字的长度是3001,所以我不明白为什么String index1,501被称为OutOfBounds.
你的错误是这段代码:
StringBuilder sb = new StringBuilder((answer.toString()));
for(int k = 0; k <= (answer.toString().length() - 10); k++) {
sb.deleteCharAt(k); //Line 13 is here.
}
Run Code Online (Sandbox Code Playgroud)
由于字符串构建器的可变性,使字符串变得更短.你要:
System.out.println(answer.substring(answer.length()-10))
Run Code Online (Sandbox Code Playgroud)
如果这对您很重要,这也具有速度的优势.
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |