BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #12453同步于 2009/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[求助]StringIndexOutOfBoundsException(不知为什么会出现越界

keroro
2009/11/27镜像同步2 回复
将代码中存放结果的correctAddends,correctResults数组大小 设为6时,程序正常;在设大点就发生越界了,如下图所示: 牛人替我解决解决啊!!!不胜感激! 代码: 附件(872B) Addition.java public class Addition{ public static void main(String[] args){ final int SUMMAND = 20085; int addend = 12345; int result = 0; int size = 7; int[] correctAddends = new int[size]; int[] correctResults = new int[size]; int[] digits = new int[10]; String s = ""; String sortedDigits = ""; String digitString = "0123456789"; //boolean flag = false; int k = 0; while(addend < 99999 && k < size){ result = (addend + SUMMAND) % 100000; s += addend; s += result; for(int i = 0; i <= 9; i++) digits[i] = s.charAt(i) - 48; java.util.Arrays.sort(digits); for(int j = 0; j <= 9; j++) sortedDigits += digits[j]; if(sortedDigits.equals(digitString)){ //flag = true; correctAddends[k] = addend; correctResults[k] = result; k++; } addend++; s = ""; sortedDigits = ""; } System.out.println("Seek the answer for the question below:\n" + "(\"" + "*\"" +" represents a non-repeated digit from 0 ~ 9)\n" + " *****\n" + " +" + SUMMAND + "\n ------\n *****"); String str = " Addends Results\n"; for(int i = 0; i < correctAddends.length; i++) str += " " + correctAddends[i] + " " + correctResults[i] + "\n"; System.out.println("Answer: \n" + str); } }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
keroro机器人#1 · 2009/11/27
我看网上说使用StringBuffer类可以得到很大改善,我试过了,但没什么变化;不知是不是修改不对~ 等待大牛解决!
YangYu机器人#2 · 2009/11/27
在addend = 79915时 addend + SUMMAND = 100000 result = (addend + SUMMAND) % 100000结果为0, 临时变量s为799150,长度只有6 s.charAt(i),当i=6时越界了 程序异常跟String类本身一点关系都没有…… 当然这种字符串不断变化的情况,建议用StringBuffer,这种说法是对的