访问列表索引时 java 中的索引越界异常
index out of bound exception in java when accessing index of list
我有一个列表,当我尝试访问该列表的索引时,它给出了索引超出范围的异常,当我用另一种方法打印该索引的值时,它显示的结果我无法理解值在那个特定的索引处,为什么 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>is && im<js)
循环,如果第一个索引处的值不在给定数字之间,那么它应该去 else 并且应该在那个特定的地方添加 0 position.But 它没有发生。
现在 IndexOutOfBoundsException 异常没有发生。
您假设 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();
你循环到 10 不知道有多少 st_jsp 列表
用
替换你的for循环
for(no=0;no<st_jsp.size();no++)
我有一个列表,当我尝试访问该列表的索引时,它给出了索引超出范围的异常,当我用另一种方法打印该索引的值时,它显示的结果我无法理解值在那个特定的索引处,为什么 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>is && im<js)
循环,如果第一个索引处的值不在给定数字之间,那么它应该去 else 并且应该在那个特定的地方添加 0 position.But 它没有发生。
现在 IndexOutOfBoundsException 异常没有发生。
您假设 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();
你循环到 10 不知道有多少 st_jsp 列表
用
替换你的for循环 for(no=0;no<st_jsp.size();no++)