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.   

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

  2.   


    package com;
    import java.util.ArrayList;
    import java.util.List;
    public class NaturalNumberSum {
    private List list;
    public NaturalNumberSum(int count) {
    list = new ArrayList();
    for (int i = 1; i <= count; i++)
    list.add(i + "");//错误1,没对list进行初始化
    }
    public int sum1() {
    int rs = 0;
    for (int i = 0; i < list.size(); i++) {
    Integer num = Integer.valueOf(list.get(i).toString());//错误2,不能从把string强制转换为Integer类型
    rs += num.intValue();
    }
    return rs;
    }
    public void clear() {

    for (int i = 0 ,size = list.size(); i < size;size = list.size()) {

    list.remove(i);//错误3,移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。 
    }
    }
    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();
    }}