import java.util.List; /**
* 改正下面程序中的错误
*/
public class NaturalNumberSum {
/**
* 存放数字的容器
*/
private List list; public NaturalNumberSum(int count) {
for (int i = 1; i <= count; i++)
list.add(i + "");
} /**
* 对容器中的数字进行求和
*
* @return
*/
public int sum1() {
int rs = 0;
for (int i = 0; i < list.size(); i++) {
Integer num = (Integer) list.get(i);
rs += num.intValue();
}
return rs;
} /**
* 删除容器中的数字
*/
public void clear() {
for (int i = 0, size = list.size(); i < size; i++) {
list.remove(i);
}
} /**
* 利用递归对前x个自然数求和
*
* @param x
* @return
*/
private static int sum2(int x) {
if (x == 0)
return 0;
else
return x + sum2(--x);
} /***************************************************************************
*
* 要求:找出程序中的3处错误并加以改正,标注出行数和出错原因,程序的正确输出结果为true
*
**************************************************************************/
public static void main(String[] args) {
int x = 5;// 对前x个自然数求和,sum1和sum2是两种求和算法
NaturalNumberSum sumer = new NaturalNumberSum(x);
System.out.println(sumer.sum1() == NaturalNumberSum.sum2(x));
sumer.clear();
} }
* 改正下面程序中的错误
*/
public class NaturalNumberSum {
/**
* 存放数字的容器
*/
private List list; public NaturalNumberSum(int count) {
for (int i = 1; i <= count; i++)
list.add(i + "");
} /**
* 对容器中的数字进行求和
*
* @return
*/
public int sum1() {
int rs = 0;
for (int i = 0; i < list.size(); i++) {
Integer num = (Integer) list.get(i);
rs += num.intValue();
}
return rs;
} /**
* 删除容器中的数字
*/
public void clear() {
for (int i = 0, size = list.size(); i < size; i++) {
list.remove(i);
}
} /**
* 利用递归对前x个自然数求和
*
* @param x
* @return
*/
private static int sum2(int x) {
if (x == 0)
return 0;
else
return x + sum2(--x);
} /***************************************************************************
*
* 要求:找出程序中的3处错误并加以改正,标注出行数和出错原因,程序的正确输出结果为true
*
**************************************************************************/
public static void main(String[] args) {
int x = 5;// 对前x个自然数求和,sum1和sum2是两种求和算法
NaturalNumberSum sumer = new NaturalNumberSum(x);
System.out.println(sumer.sum1() == NaturalNumberSum.sum2(x));
sumer.clear();
} }
rs += num.intValue();
改为
String num = (String) list.get(i);//2
Integer num1=Integer.parseInt(num);
rs += num1.intValue();第3个未找到
改为for (int i = 0;i< list.size(); i++)
1:list.add(i + ""); 存入的是String 取出的时候需要把String转化成Integer 使用Integer.parseInt(list.get(i));
List必须要初始化
for (int i = 0, size = list.size(); i < size; i++) {
list.remove(i);
}
}
会出现异常 建议使用iterator!private static int sum2(int x) 改成public的public int sum1() {
int rs = 0;
for (int i = 0; i < list.size(); i++) {
Integer num = (Integer) list.get(i); //本来是string 这样会出现 classcast异常
rs += num.intValue();
}
return rs;
}
for (int i = 0, size = list.size(); i < size; i++) {
list.remove(i);
}
}
会出现异常 建议使用iterator!
list 的remove方法 不能这么用!呵呵。因为每次list都在变化 而且 remove(1)之后 第2个又变第一个。也可以这样写public void clear() { \
int size = list.size();
for (int i = 0, i < size; i++) {
list.remove(0);
}
}
private List list只是定义了一个引用,此时引用不指向任何地方
new ArrayList() 之后,刚才定义的引用就指向一个具体的ArrayList实体了
2、list.add(i + "")改为list.add(i)
list.add(i + "")里存放的是String型,list.add(i)里存放的是int型,为了后面的求和,所以这样改
3、for (int i = 0, size = list.size(); i < size; i++)改为for (int i = 0;i < list.size(); i++)
每次执行一次list.remove(i),list.size()都会减一,随着i的自增,会产生越界
* 改正下面程序中的错误
*/
public class NaturalNumberSum {
/**
* 存放数字的容器
*/
private List list=new ArrayList();
public NaturalNumberSum(int count) {
for (int i = 1; i <= count; i++)
list.add(i+"");
} /**
* 对容器中的数字进行求和
*
* @return
*/
public int sum1() {
int rs = 0;
for (int i = 0; i < list.size(); i++) {
String num = (String) list.get(i);
rs += Integer.parseInt(num);
}
return rs;
} /**
* 删除容器中的数字
*/
public void clear() {
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
} /**
* 利用递归对前x个自然数求和
*
* @param x
* @return
*/
private static int sum2(int x) {
if (x == 0)
return 0;
else
return x + sum2(--x);
} /***************************************************************************
*
* 要求:找出程序中的3处错误并加以改正,标注出行数和出错原因,程序的正确输出结果为true
*
**************************************************************************/
public static void main(String[] args) {
int x = 5;// 对前x个自然数求和,sum1和sum2是两种求和算法
NaturalNumberSum sumer = new NaturalNumberSum(x);
System.out.println(sumer.sum1() == NaturalNumberSum.sum2(x));
sumer.clear();
} }
size的初始化不是和i一样么?
第一次初始化为list。size 以后还能变么?修改后的for (int i = 0;i < list.size(); i++) list.size()不是能变么? 为什么这个反而成功?
import java.util.List;/**
* 改正下面程序中的错误
*/
public class NaturalNumberSum {
/**
* 存放数字的容器
*/
private List list = new ArrayList();//错误3 public NaturalNumberSum(int count) {
for (int i = 1; i <= count; i++)
list.add(new Integer(i));//错误1
} /**
* 对容器中的数字进行求和
*
* @return
*/
public int sum1() {
int rs = 0;
for (int i = 0; i < list.size(); i++) {
Integer num = (Integer) list.get(i);
rs += num.intValue();
}
return rs;
} /**
* 删除容器中的数字
*/
public void clear() {
for (int i = 0; i < list.size(); i++) {//错误2
list.remove(i);
}
} /**
* 利用递归对前x个自然数求和
*
* @param x
* @return
*/
private static int sum2(int x) {
if (x == 0)
return 0;
else
return x + sum2(--x);
} /***************************************************************************
*
* 要求:找出程序中的3处错误并加以改正,标注出行数和出错原因,程序的正确输出结果为true
*
**************************************************************************/
public static void main(String[] args) {
int x = 5;// 对前x个自然数求和,sum1和sum2是两种求和算法
NaturalNumberSum sumer = new NaturalNumberSum(x);
System.out.println(sumer.sum1() == NaturalNumberSum.sum2(x));
sumer.clear();
}}
* 删除容器中的数字
*/
public void clear() {
for (int i = 0; i < list.size(); i++) {//错误2
list.remove(i);
}
}
这样修改也是不对的,直接用list.clear()
请看下面的测试代码:import java.util.ArrayList;
import java.util.List;class TEST {
public static void main(String args[]) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
for (int j = 0; j < list.size(); j++) {
list.remove(j);
for (int i = 0; i < list.size(); i++) {
System.out.print(i + ": ");
System.out.println(list.get(i));
}
} }
}
------------------------------------------------------------------
0: b
1: c
2: d
3: e
0: b
1: d
2: e
0: b
1: d也就是最后list还有两个元素