
初学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)
求高手解释一下原因,改正一下 展开
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)
求高手解释一下原因,改正一下 展开
4个回答
展开全部
先说你的 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,然后输出这个返回值,多简单~~
字符串数组下标溢出了,你用charAt把字符一个一个的放在str数组里面,只能放进去10个字符进去,charAt返回值是char,你new了一个[10]也就是说你只能放进去10个char进去,再放当然就报错了,你应该先获取str1的长度,然后根据长度NEW出一个数组来,然后在反向添加到数组里面,当然如果不考虑内存占用的情况,你直接可以用string的相加就可以完成了,当然如果用StringBulider那就更好了,我只能提供你一个思路,因为我不是学JAVA的,呵呵
我不知道JAVA可不可以“String[] str=new String[str1.length()];”这样用,如果可以,你就简单多了,如果不行,把反向获取字符串的方法写成一个私有方法,形参是一个整数,获取STR1的长度,返回值是一个string,然后输出这个返回值,多简单~~
展开全部
是酱紫的。。。
你的str1长度为32,这没错。
但是你也应该知道,不管是数组,还是你用charAt方法,都是从0开始的,而不是从1开始。
也就是说,你的str1的字符是从0-31的,而不是1-32,所以在你循环的时候会遇到 charAt(32)
这样的报错了。
解决方法:
for(i=1;i<=m;i++)
更改为
for(i=0;i<m;i++)
你的str1长度为32,这没错。
但是你也应该知道,不管是数组,还是你用charAt方法,都是从0开始的,而不是从1开始。
也就是说,你的str1的字符是从0-31的,而不是1-32,所以在你循环的时候会遇到 charAt(32)
这样的报错了。
解决方法:
for(i=1;i<=m;i++)
更改为
for(i=0;i<m;i++)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(i=1;i<=m;i++)这里是错的,因为数组索引是从0开始的,所以你后面str1.charAt(m)取不到值的,所以错误提示你字符串索引越界;你写成下面这样试试
for(i=1;i<m;i++)
for(i=1;i<m;i++)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
很明显了嘛!数组越界!
很明显了嘛!数组越界!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询