zoukankan      html  css  js  c++  java
  • 第十周

    第十周

    任务:

    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用法不熟练,然后又出现了类型转换不兼容的问题,在检查错误和查阅资料方面,花费了许多的时间。
    因此我感觉要要多注重基础知识的积累。

  • 相关阅读:
    装机软件
    关于软件开发
    Jquery中ajax基本语法
    jQuery+Ajax+PHP滚动加载
    ajax无刷新分页
    PHPExcel数据导出到Excel文件
    Linux下启动,停止,重启Nginx、Mysql、PHP
    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
    linux系统给普通用户添加sudo权限
    Linux下全局安装composer方法
  • 原文地址:https://www.cnblogs.com/m20155310/p/7028534.html
Copyright © 2011-2022 走看看