【问题标题】:index out of bound exception in java when accessing index of list访问列表索引时java中的索引越界异常
【发布时间】:2015-05-13 02:12:19
【问题描述】:

我有一个列表,当我尝试访问该列表的索引时,它给出了索引超出范围的异常,当我在另一种方法中打印该索引的值时,它显示的结果我无法理解何时值为在那个特定的索引处为什么会抛出 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

我的java代码是-

public  List<Vacc_vs6> refarray_vac1(String fdate,String ldate) throws SQLException, ParseException {

            st_jsp.clear();


           try
                {  
                  con = getConnection();
                  stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);


                         String vs1= "sql query";

                  stmt.executeQuery(vs1);
                   rs = stmt.getResultSet();

                   while (rs.next()) {
                       Vacc_vs6 ref = new Vacc_vs6();

                          ref.setLogtime(rs.getString(1));
                          ref.setBeam_current(rs.getString(2));
                          ref.setBeam_energy(rs.getString(3));
                          ref.setst4_vs6_bag1_rb(rs.getString(4));
                          ref.setst4_vs6_bag2_rb(rs.getString(5));
                          ref.setst4_vs6_bag3_rb(rs.getString(6));
                          ref.setst4_vs6_bag4_rb(rs.getString(7));
                          ref.setst4_vs6_bag5_rb(rs.getString(8));
                          ref.setst4_vs6_bag6_rb(rs.getString(9));
                          ref.setst4_vs6_bag7_rb(rs.getString(10));
                          ref.setst4_vs6_bag8_rb(rs.getString(11));
                          ref.setst4_vs6_bag9_rb(rs.getString(12));
                      st_jsp.add(ref);

                    }

                }
           catch( Exception e )
                    {
            System.out.println("\nException in refarray_vac1 "+e);
                    }
           List<Vacc_vs6> new_list=new ArrayList<Vacc_vs6>();
            double is = 9.5;
             double js = 10.5;
             int no=0;
        for(no=0;no<=10;no++)
            {
                String i= st_jsp.get(no).getBeam_current();//**Showing exception here**
                double im = Double.parseDouble(i) ;
                if(im>is && im<js) 
                 {
                    new_list.addAll(st_jsp);
                 }
                else
                {
                    new_list.addAll(st_jsp);
                }
                 is +=10;js +=10; 

                }

           return st_jsp;
          }

当我定义另一个方法时

public String get_Array()
{  

 List<Vacc_vs6> new_list=new ArrayList<Vacc_vs6>();
String i= st_jsp.get(0).getBeam_current();

System.out.println("noeee"+i);
return i;
}

然后在0索引处打印值。那么为什么我运行上述方法时会抛出异常?

编辑-1

我确实用 st_jsp.size() 纠正了它。但是根据if(im&gt;is &amp;&amp; im&lt;js) 循环,如果第一个索引处的值不在给定数字之间,那么它应该转到 else 并且应该添加 0在那个特殊的位置。但它没有发生。 现在没有发生 IndexOutOfBoundsException 异常。

【问题讨论】:

    标签: java list indexoutofboundsexception


    【解决方案1】:

    您假设st_jsp 将包含至少 11 个元素:

        for (no=0;no<=10;no++) {
            String i= st_jsp.get(no).getBeam_current();
    

    根据您得到的异常,它包含 0 个元素。

    更安全的循环是

        for (no=0;no<st_jsp.size();no++) {
            String i= st_jsp.get(no).getBeam_current();
    

    【讨论】:

    • @tiddirastogi 我读了你的编辑。如果st_jsp.size() 为0,则永远不会到达if(im&gt;is &amp;&amp; im&lt;js),因为根本不会进入for 循环。
    【解决方案2】:

    你一直循环到 10 点却不知道有多少个 st_jsp 列表

    将你的 for 循环替换为

         for(no=0;no<st_jsp.size();no++)
    

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多