第五章:编写程序-超强力方法

该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!

第五章:编写程序-超强力方法


这一章实际是在叫我们如何编写一个简单的程序;
我们不会全部记录,而是会着重关注Java语言本身;
有关程序设计的方式,略有介绍(毕竟我不是小白hahahaha)

让方法产生更大的作用

    我们已经属性变量、对象,现在我们还要接触运算符,while循环,for循环;
    产生随机数的方法,将String转换成int,从无到有写一个使用的程序;
    (先来个简单版的,后续再写复杂的)

需求分析,程序设计

1.首先进行高层分析:
    明确需求点,画出流程图;
2.开发类:
    也许你会有自己的编程方法论(methodology)/过程(process)/步骤(approach);
    我们则可以这样做(理解和学习想法):
1)找出类应该做的事情;
2)列出实例变量和方法;
3)编写方法和伪码(有点像注释);
4)编写方法的测试用程序;(预设的输入,理论的输出,用作测试)
5)实现类;
6)测试方法;
7)除错或重新设计;

你可能会设计很多类:设计类的时候最好遵循良好的面向对象原则,并且不让单一的类执行太多的任务;

上边的过程在编写时可简单理解为
    编写伪码:伪码能帮你专注于逻辑而不需要顾虑到程序的语法;
    编写测试码:用于测试程序的代码;
    编写真实码:实际设计出的真正Java程序代码;

伪码大致分为:

    实例变量的声明(Declare);
    方法的声明(Declare);
    方法的逻辑(Method);
(就是用文本描述清楚上述3点)

先编写测试用程序代码的概念来自极限编程(XP)方法论;

XP部分规则如下:

    多次经常小规模发布;
    避免加入规格没有的功能(不管“未来”会用到的功能性有多诱人);
    先写测试用的程序;
    正常工作上下班;
    随时随地重构(refactor),也就是改善程序代码;
    保持简单;
    双双结伴进行工作,并经常交换以便让大家都清楚全局;
    
理想上,先写一点点的测试吗,然后只编写能够通过该测试的方法就好;之后在编写另一点。。。如此反复;
你就能证明新加入的程序代码不会破坏原有已经测试的部分;

把字符串转换成int

    int guess = Integer.parseInt(“999”);
    Integer:Java内建类
    这个方法只会对代表数字的String产生作用,除此之外,程序会崩溃(就是抛出一个异常,后续会介绍);

for循环:(加强版)

    for(int cell : cells){}
    类似OC的for-in;
    ‘:’表示in;
    注意自增、自减运算符的使用;
   

break

    无条件跳出循环;

伪码设计:
    当你在编写伪码时,应该要假设你总有办法可以做出某些功能,如此才能让你专注于逻辑设计;

要点

你的Java程序应该从高层设计开始;
你通常会在创建类时写出下列3种东西:
    伪码;
    测试码;
    真实码;
伪码应该描述要做的事情,而不是如何做;
使用伪码来帮助测试码的设计;
实现方法前应编写测试码;
知道反复执行的次数,for循环比while循环更好;
使用前置或后置的递增可以为变量+1;(递减的-1)
使用Integer.parseInt()来获取String的整数值;(只会在String为数字时有作用)
使用break命令来提前跳出循环;

random():

    获取0~4之间的int可以这样做:int randomNum = (int)(Math.random()*5);
    Math是Java内建的类,Math.random()会返回一个介于0~1之间的数;
    0.x~4.x取整之后就是0~4的某个值;

helper-从命令行获取输入

(Code-GameHelper.java)
import java.io.*;

public class GameHelper{
    public String getUserInput(String prompt){
        String inputLine = null;
        System.out.print(prompt + " ");
        try{
            BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
            inputLine = is.readLine();
            if(inputLine.length() == 0){
                return null;
            }
        }catch(IOException e){
            System.out.println("IOException:" + e);
        }
        return inputLine;
    }
}


比较for循环和while循环

    while循环只有boolean测试,没有内建的初始化或重复表达式;
    while适合用在不知道要循环几次的循环上,若知道要执行几次,则使用for会比较容易阅读;

再看加强版for循环

    Java5.0(Tiger)开始支持,能够容易的逐个运行数组或其他集合(Collection)的元素;

转换primitive主数据类型

    long->short 转换的话,精度会损失;且由于long比short大,编译器也不允许;
    若要强制编译器,可以使用cast运算符;
    示例:long y = 43;
                int x = (int)y;
    前置的类型转换会告诉编译器要将y的值裁剪成int的大小来赋值给x;(如果超过int的范围,结果会很诡异)


猜你喜欢

转载自blog.csdn.net/baby_hua/article/details/79230794