初学java程序老出错,求帮忙。。。。

程序如下:publicclassjava{publicstaticvoidmain(String[]args){Stringstr1="TextbookforProgra... 程序如下:
public class java
{
public static void main(String[] args)
{
String str1="Textbook for Programming in Java"; /*此句话单词倒着数出*/
String[] str=new String[10];
int i=1,j=0,m=0;
m=str1.length();
for(i=1;i<=m;i++)
{
if(str1.charAt(i)!=' ')
{
str[j]+=str1.charAt(i);
}
else if((str1.charAt(i)==' ')&&(str1.charAt(i-1)!=' '))
{
j++;
}
}
for(;j>=0;j--)
{
System.out.println(str[j]+" ");
}
}

}
编译的时候没问题,但只要一运行class文件就提示下面信息:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 32
at java.lang.String.charAt(Unknown Source)
at java.main(java.java:11)

求高手解释一下原因,改正一下
展开
 我来答
kangoo_gs
2011-10-30 · TA获得超过487个赞
知道小有建树答主
回答量:409
采纳率:0%
帮助的人:340万
展开全部
先说你的 i=1 这个问题,数组下标从0开始,不是从1开始的~~

字符串数组下标溢出了,你用charAt把字符一个一个的放在str数组里面,只能放进去10个字符进去,charAt返回值是char,你new了一个[10]也就是说你只能放进去10个char进去,再放当然就报错了,你应该先获取str1的长度,然后根据长度NEW出一个数组来,然后在反向添加到数组里面,当然如果不考虑内存占用的情况,你直接可以用string的相加就可以完成了,当然如果用StringBulider那就更好了,我只能提供你一个思路,因为我不是学JAVA的,呵呵

我不知道JAVA可不可以“String[] str=new String[str1.length()];”这样用,如果可以,你就简单多了,如果不行,把反向获取字符串的方法写成一个私有方法,形参是一个整数,获取STR1的长度,返回值是一个string,然后输出这个返回值,多简单~~
hyjiacan
2011-10-30 · TA获得超过3912个赞
知道小有建树答主
回答量:894
采纳率:100%
帮助的人:1108万
展开全部
是酱紫的。。。

你的str1长度为32,这没错。

但是你也应该知道,不管是数组,还是你用charAt方法,都是从0开始的,而不是从1开始。

也就是说,你的str1的字符是从0-31的,而不是1-32,所以在你循环的时候会遇到 charAt(32)
这样的报错了。

解决方法:
for(i=1;i<=m;i++)
更改为
for(i=0;i<m;i++)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
弘菀柳XI
2011-10-30 · TA获得超过1052个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:94.3万
展开全部
for(i=1;i<=m;i++)这里是错的,因为数组索引是从0开始的,所以你后面str1.charAt(m)取不到值的,所以错误提示你字符串索引越界;你写成下面这样试试
for(i=1;i<m;i++)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友02dc4f012
2011-10-30 · TA获得超过195个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:166万
展开全部
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
很明显了嘛!数组越界!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式