Posted on 2006-10-09 22:24
刘恒涛 阅读(502)
评论(0) 编辑 收藏
一同学问了一个字符串反转的问题!开始觉得很简单的!
一种思路就是获得字符串在将它转换成为字符串数组在用循环将他输出就可以了!
我作了两个页面,一个用于输入,一个用于处理;
我最初是这么写的:
我正序输出时是正确的即
<%
for(int i=0;i<=s.lenth.i++)
%>
第一次尝试:
<%
String fanzhuan=request.getParameter("fanxu");
if((fanzhuan.length()==0)&&(fanzhuan=="")){
out.print("TextField can't be null");
}
else{
char s[]=fanzhuan.toCharArray();
String fanzhuan2="";
int j=s.length;
for(int i=j;i>0;i--)//老出越界的错误晕!
{
fanzhuan2+=s[i];
}
out.print(fanzhuan2);
}
%>
出错信息:
java.lang.ArrayIndexOutOfBoundsException: 3
org.apache.jsp.fanxu2_jsp._jspService(fanxu2_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
第二次尝试:
for(int i=j;i>0;--i)//老出越界的错误晕!
{
fanzhuan2+=s[i];
}
出错信息:
java.lang.ArrayIndexOutOfBoundsException: 3
org.apache.jsp.fanxu2_jsp._jspService(fanxu2_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
第四次尝试:
for(int i=j;i>-1;--i)//老出越界的错误晕!
{
fanzhuan2+=s[i];
}
出错信息:
java.lang.ArrayIndexOutOfBoundsException: 3
org.apache.jsp.fanxu2_jsp._jspService(fanxu2_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
第五次尝试:
for(int i=j;i>1;--i)//老出越界的错误晕!
{
fanzhuan2+=s[i];
}
java.lang.ArrayIndexOutOfBoundsException: 3
org.apache.jsp.fanxu2_jsp._jspService(fanxu2_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
第六次尝试
for(int i=j;i>1;)//老出越界的错误晕!
{
i=i-1;
fanzhuan2+=s[i];
}
这次终于成功了
第七次测试
while(j>0)
{
j--;
fanzhuan2+=s[j];
}
out.print(fanzhuan2);
}
成功!
第八次测试
do {
j--;
fanzhuan2+=s[j];
}
while(j>0);
out.print(fanzhuan2);
成功!
第九次测试:
do {
fanzhuan2+=s[j];
j--;
}
while(j>0);
出错同上!
由上面的尝试可以发现问题是出在i--
是在那里运算的要是在
fanzhuan2+=s[j]; 之前则正确!
在之后则出现越界的错误!
很简单的问题就是因为获得length是出组的长度而不是最后一个元素的位置!应减一!
可见还是因为对for语句和数组概念的理解不深刻!