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(); 
} } 

解决方案 »

  1.   

     1  private List list 改为 private List list=new ArrayList() 2 Integer num = (Integer) list.get(i); 
     rs += num.intValue(); 
     改为
    String num = (String) list.get(i);//2
    Integer num1=Integer.parseInt(num);
    rs += num1.intValue();第3个未找到
      

  2.   

    for (int i = 0, size = list.size(); i < size; i++) 
    改为for (int i = 0;i< list.size();  i++)
      

  3.   

    看到1个问题
    1:list.add(i + ""); 存入的是String 取出的时候需要把String转化成Integer 使用Integer.parseInt(list.get(i));
      

  4.   

    private List list=new ArrayList();
    List必须要初始化
      

  5.   

    public void clear() { 
    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; 

      

  6.   

    public void clear() { 
    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); 

      

  7.   

    i+"" 会自动转换成 String
      

  8.   

    1、private List list 改为 private List list=new ArrayList() 或在构造函数里实例化该list
         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的自增,会产生越界
      

  9.   

    package shi;import java.util.*; /** 
    * 改正下面程序中的错误 
    */ 
    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(); 
    } }
      

  10.   

    关于第三个 我还有个疑问 for (int i = 0, size = list.size(); i < size; i++)
    size的初始化不是和i一样么?
    第一次初始化为list。size  以后还能变么?修改后的for (int i = 0;i < list.size();  i++) list.size()不是能变么?  为什么这个反而成功?
      

  11.   

    package test11;import java.util.ArrayList;
    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();
    }}
      

  12.   

    /**
    * 删除容器中的数字
    */
    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还有两个元素