Posted on 2006-10-09 22:24
劉恒濤 閱讀(508)
評(píng)論(0) 編輯 收藏
一同學(xué)問(wèn)了一個(gè)字符串反轉(zhuǎn)的問(wèn)題!開(kāi)始覺(jué)得很簡(jiǎn)單的!
一種思路就是獲得字符串在將它轉(zhuǎn)換成為字符串?dāng)?shù)組在用循環(huán)將他輸出就可以了!
我作了兩個(gè)頁(yè)面,一個(gè)用于輸入,一個(gè)用于處理;
我最初是這么寫(xiě)的:
我正序輸出時(shí)是正確的即
<%
? 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--)//老出越界的錯(cuò)誤暈!
??{
???fanzhuan2+=s[i];
??}
??? out.print(fanzhuan2);
??}
%>
出錯(cuò)信息:
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)//老出越界的錯(cuò)誤暈!
??{
???fanzhuan2+=s[i];
??}
出錯(cuò)信息:
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)//老出越界的錯(cuò)誤暈!
??{
???fanzhuan2+=s[i];
??}
出錯(cuò)信息:
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)//老出越界的錯(cuò)誤暈!
??{
???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;)//老出越界的錯(cuò)誤暈!
??{
???i=i-1;
???fanzhuan2+=s[i];
??}
這次終于成功了
第七次測(cè)試
?? while(j>0)
?? {
???? j--;
???? fanzhuan2+=s[j];
??? }???
??? out.print(fanzhuan2);
???????? }
成功!
第八次測(cè)試
do {???
??? j--;???
???? fanzhuan2+=s[j];
??????? }??
??????? while(j>0);???
???????? out.print(fanzhuan2);????
成功!
第九次測(cè)試:
???? do {???
?
???? fanzhuan2+=s[j];
??????????? j--;??
??????? }??
??????? while(j>0);??
出錯(cuò)同上!
由上面的嘗試可以發(fā)現(xiàn)問(wèn)題是出在i--
是在那里運(yùn)算的要是在
fanzhuan2+=s[j]; 之前則正確!
在之后則出現(xiàn)越界的錯(cuò)誤!
很簡(jiǎn)單的問(wèn)題就是因?yàn)楂@得length是出組的長(zhǎng)度而不是最后一個(gè)元素的位置!應(yīng)減一!
可見(jiàn)還是因?yàn)閷?duì)for語(yǔ)句和數(shù)組概念的理解不深刻!