第十周

第十周

任务:

public class TestArgs {
	public static void main(String [] args) {

		int sum = 0;

		// 参考Integer类中的方法把字符串转为整数
		// 补充代码以递归的方式求命令行参数的args中整数数据的和
		...
		
    // 打印 
		System.out.println(sum);
	}
        
        //递归函数
        public static void  clSum(int [] arr) {
           ...
        }
}

具体操作:

普通方法

public class TestArgs {

    public static void main(String[] args) {

        int[] x=new int[10];

        for (int i = 0; i < args.length; i++) {

            x[i] = Integer.parseInt(args[i]);

        }

        int sum=clSum(x);

        /*int sum = 0;

        int k;

        for (int i = 0; i < args.length; i++) {

            k = Integer.parseInt(args[i]);

            sum=sum+k;

        }

*/

        System.out.println(sum);

    }

递归调用

//递归函数

    public static int clSum(int [] arr){

        int n=arr.length;

        if(n == 1)

            return arr[0];

        else {

            int[] y = Arrays.copyOf(arr, n - 1);

            return clSum(y) + arr[n - 1];

        }

    }
 }

这个实践实际上很简单,最核心的就是通过Integer将字符串转换为数字,然后换一种方式,练习递归函数的调用。应该解决的最主要的问题就是:数组中是以字符串的形式存储的,因此应当首先将字符串转换为数字,才能进行接下来的求和运算。
实验中,

int k;
        for (int i = 0; i < args.length; i++) {
            k = Integer.parseInt(args[i]);
            sum=sum+k;
        }

语句

k = Integer.parseInt(args[i])

实现了将数组args[i]通过Integer转换为数字类型,然后通过一个循环内的作和,从而实现相加运算。

另外,递归调用是一种简单、常用又重要的一种编程思想。就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。从而实现,将大问题分解成小问题,将复杂的问题简单化。在本例中,要算出一个10元素的数组的和,只要先算出前9个的和,再加上最后一个就好了;要算出前9个的和,只要先算出前8个的和就好了;直到只剩下一个元素的时候,返回该元素,即可。

出现的问题和解决方法

•问题:递归过程中,出现以下问题:

解决方法:

将代码

int sum=clSum(10)

改为

int[] x=new int[10];int sum=clSum(x)

•分析原因:递归函数clSum中的参数是int [] 类型,而调用语句

int sum = clSum(10)

,中的“10”为int类型,两者无法兼容,产生冲突。并且,要传进来的参数是数组的值,而并非个数,因此传10本身就是错误的。
修改为

int[] x=new int[10];int sum=clSum(x)

后,x为int [] 类型,与被调参数的类型一致,问题解决。

学到了什么

首先,学会了Integer的用法,如何实现将字符串转换为数字;然后巩固了递归调用的思想和具体方法。以后遇到此类问题会较快发现问题,从而不在类似方面犯错。

感悟与体会

通过本次实践的练习,我了解到我的基础知识不牢固。刚开始Integer用法不熟练,然后又出现了类型转换不兼容的问题,在检查错误和查阅资料方面,花费了许多的时间。
因此我感觉要要多注重基础知识的积累。

原文地址:https://www.cnblogs.com/m20155310/p/7028534.html