当前位置:编程学习 > JAVA >>

大神求解答?java代码报错、??


package com.zao;

import java.util.ArrayList;

public class Core1 {
private String xingming;
private String lll;
private String mmm;

public Core1(String a, String b, String c) {
xingming = a;
lll = b;
mmm = c;
}
public String getXingming(){
return xingming;
}public String getLLL(){
return lll;
}public String getmmm(){
return mmm;
}public Core1(){}
public static void main(String[] args) {
ArrayList c = new ArrayList();
System.out.println("" + c.size());
Core1 b = new Core1("孙悟空", "2", "4");
Core1 b2 = new Core1("沙僧","2","sd");
Core1 b3 = new Core1("八戒","2s","360");
c.add(b);
c.add(b2);
c.add(b3);
System.out.println("大小为:" + c.size());
for (int i = 0; i <= c.size(); i++) {
Core1 f = (Core1) c.get(i);
System.out.println("第" + (i + 1) + "个学生的姓名字是" + f.getXingming());
}

}

}
运行显示:
0
大小为:2
第1个学生的姓名字是孙悟空
第2个学生的姓名字是沙僧
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at com.zao.Core1.main(Core1.java:33)
问题是:那个“0”是哪里来的,还有后面的异常,既然能够输入结果,怎么还有异常同时出现呢、不是不能再输出结果吗???很希望得到各位的指点。very  thanks











--------------------编程问答-------------------- 24行 System.out.println("" + c.size());
你定义了一个空集合再紧接着打印他的大小必然是0啊。

我就说怎么看怎么不对,copy跑了一下,你add三个对象,第二次大小肯定为3啊。
大小为:3
第1个学生的姓名字是孙悟空
第2个学生的姓名字是沙僧
第3个学生的姓名字是八戒


异常很明显是数组下标越界
因为你for循环跑的前三次都正常肯定不会有异常,关键是:
i <= c.size()这就不对了。
集合索引和数组一样是从0开始,你集合3个对象,所以c.get(2)就已经是最后一个了,你写个小于等于让程序继续去取你的c.get(3),根本没有这个对象,必然异常
--------------------编程问答-------------------- i <= c.size() 改为 i < c.size() --------------------编程问答--------------------
引用 1 楼 wlwlwlwl015 的回复:
24行 System.out.println("" + c.size());
你定义了一个空集合再紧接着打印他的大小必然是0啊。

我就说怎么看怎么不对,copy跑了一下,你add三个对象,第二次大小肯定为3啊。
大小为:3
第1个学生的姓名字是孙悟空
第2个学生的姓名字是沙僧
第3个学生的姓名字是八戒


异常很明显是数组下标越界
因为你for循环跑的前三次都正常肯定不会有异常,关键是:
i <= c.size()这就不对了。
集合索引和数组一样是从0开始,你集合3个对象,所以c.get(2)就已经是最后一个了,你写个小于等于让程序继续去取你的c.get(3),根本没有这个对象,必然异常
是的,你这里会取到3但是下标是3的位置没有。。。就抛异常了 --------------------编程问答-------------------- 发过一贴还发?都讲过了


import java.util.ArrayList;

public class Core1 {
private String xingming;
private String lll;
private String mmm;

public Core1(String a, String b, String c) {
xingming = a;
lll = b;
mmm = c;
}

public String getXingming() {
return xingming;
}

public String getLLL() {
return lll;
}

public String getmmm() {
return mmm;
}

public Core1() {
}

public static void main(String[] args) {
ArrayList c = new ArrayList();
System.out.println("" + c.size());
Core1 b = new Core1("孙悟空", "2", "4");
Core1 b2 = new Core1("沙僧", "2", "sd");
Core1 b3 = new Core1("八戒", "2s", "360");
c.add(b);
c.add(b2);
c.add(b3);
System.out.println("大小为:" + c.size());
for (int i = 0; i < c.size(); i++) {
Core1 f = (Core1) c.get(i);
System.out.println("第" + (i + 1) + "个学生的姓名字是" + f.getXingming());
}

}

}
--------------------编程问答-------------------- 这是下标越界了啊。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,