首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

奇怪的错误。帮小弟我看下,多谢了

2012-01-12 
奇怪的异常。帮我看下,谢谢了刚学JAVA,编了个程序可以编译通过,运行时就出异常了。帮我看下,谢谢了。//:c09:E

奇怪的异常。帮我看下,谢谢了
刚学JAVA,编了个程序可以编译通过,运行时就出异常了。帮我看下,谢谢了。
//:   c09:E09_StringContainer.java
//+M   java   E09_StringContainer
import   java.util.*;

/******************   Exercise   9   ******************
  *   Create   a   container   that   encapsulates   an   array
  *   of   String,   and   that   only   adds   Strings   and   gets
  *   Strings,   so   that   there   are   no   casting   issues
  *   during   use.   If   the   internal   array   isn 't   big
  *   enough   for   the   next   add,   your   container   should
  *   automatically   resize   it.   In   main(),   compare
  *   the   performance   of   your   container   with   an
  *   ArrayList   holding   Strings.
  ***********************************************/
class   StringContainer   {   //class   container
private   int   size   =   10;
private   String[]   strings   =   new   String[size];
private   int   index   =   0;
public   int     setSize()   {   //if   the   array   isn 't   big   enough,resize  
return   size   =   size*2;
}
public   void   add(String   s)   {//add   string
if(index> =size)   {
setSize();
}
strings[index]   =   s;//||Exception   here||.
index++;
}
public   void   print(){//print   the   list.
for(int   i   =   0;i <strings.length;i++)   {
System.out.println(strings[i].toString());
}
}
public   int   getSize()   {//get   the   size  
return   size;
}
public   int   getIndex()   {//get   the   index   which   record   the  
                                                                //   real   string 's   numbers。
return   index;
}
}
public   class   E09_StringContainer   {
public   static   void   main(String[]   args)   {
StringContainer   strc   =   new   StringContainer();
String[]   strs   =           { "def ", "ghi ", "jkl ", "dadf ", "gfgai ", "gfadio ", "gaodafd ", "fdfdcvsfso ", "fdafdacims ", "fdafi ", "fdifadkm ", "daida ", "idak ", "aok ", "dia ", "fdm "};
for(int   i   =0;i <strs.length;i++)   {
strc.add(strs[i]);//||exception||.
}
strc.print();
System.out.println(strc.getSize());
System.out.println(strc.getIndex());
}
}

异常是这样:
Exception   in   thread   "main "   java.lang.ArrayIndexOutOfBoundsException:   10
at   StringContainer.add(E09_StringContainer.java:26)
at   E09_StringContainer.main(E09_StringContainer.java:46)

[解决办法]
数组索引超范围。LZ把下面的程序运行一下就明白了。



public class Test {
public static void main(String[] args){
int size = 10;
String[] strings = new String[size];
size=20;
System.out.print(strings.length);
}
}
[解决办法]
楼上的不对!该这样:
public class Test {
public static void main(String[] args){
int size = 10;
int[] ints = new int[size];
for(int i = 0;i <=ints.length;i++)
{
ints[i] = i ;
System.out.println(ints[i]);
}
System.out.print(ints.length);
}
}
这才是数组越界异常了。
[解决办法]
setSize()方法只是将size的值增加到原来的两倍,而数组的大小并没有改变,这样当然会越界了。

热点排行