Posted on 2006-10-09 22:24
劉恒濤 閱讀(509)
評論(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語句和數組概念的理解不深刻!