软件构造-Reading 1:静态检查

本文介绍了静态检查在编程中的重要性,以Java为例,讲解了静态类型、静态检查与动态检查的区别。通过冰雹序列的示例,展示了Java中类型系统的使用,强调了静态检查如何防止类型错误。文章还讨论了Java中的数组、集合、迭代、方法等概念,并提醒了静态类型语言中的潜在陷阱,如原始类型的非数字行为。
摘要由CSDN通过智能技术生成

阅读1:静态检查

目标:

  • 学习静态类型
  • 了解好的软件的三大特性

冰雹序列

   作为一个运行示例,我们先来了解一下“冰雹序列”,它是这样定义的:从正整数n开始,如果n是偶数,则下一个数是n/2,否则下一个数是3n+1,直到n等于1。这里有几个例子:

2, 1
3, 10, 5, 16, 8, 4, 2, 1
4, 2, 1
2n, 2n-1 , … , 4, 2, 1
5, 16, 8, 4, 2, 1
7, 22, 11, 34, 17, 52, 26, 13, 40, …? (会停止吗?)

   由于存在3n+1这种变化,所以序列元素的大小可能会忽高忽低——这也是“冰雹序列”名称的来历,冰雹在落地前会在云层中忽上忽下。那么所有的序列都会最终“落地”变到1吗?(这个猜想称为考拉兹猜想 ,现在还没有一个好的解决方法。)

计算冰雹序列

下面的代码用于打印冰雹序列:

// Java
int n = 3;
while (n != 1) {
   
    System.out.println(n);
    if (n % 2 == 0) {
   
        n = n / 2;
    } else {
   
        n = 3 * n + 1;
    }
}
System.out.println(n);
# Python
n = 3
while n != 1:
    print(n)
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1


print(n)

这里有几件事值得注意:

  • Java中表达式和语句的基本语义与Python非常相似:例如while,if行为相同。
  • Java在语句末尾需要分号。额外的标点符号可能会很痛苦,但是它也为您提供了更多组织代码的自由——您可以将语句分成多行以提高可读性。
  • Java在使用 if 和 while的时候,其中的条件判断需要用括号括起来。
  • Java需要在块周围使用花括号,而不是缩进。即使Java不会对多余的空间给予任何关注,也应始终缩进该块。编程是一种交流形式,您不仅在与编译器交流,还与人类交流。人类需要那种缩进。我们稍后会再讨论。

类型

   在上面的代码中,Python和Java最大的不同就是Java需要指定变量n的类型:int
   类型是一些值的集合,以及这些值对应的操作。
   例如下面这5种常用的原始类型 :
int (例如5和-200这样的整数,但是其范围有限制,大概在±20亿)
long (比int更大范围的整数)
boolean(对或错这两个值)
double (浮点数,其表示的是实数的子集)
char (单个字符例如 ‘A’ 和 ‘$’)
   Java也有对象类型 ,例如:
String 表示一串连续的字符。
BigInteger 表示任意大小的整数。
   从Java的传统来说,原始类型用小写字母,对象类型的起始字母用大写。
   操作符是一些能接受输入并输出结果的功能。他们的语法各有区别,Java中常见的有下面这三种:

  • 前缀、中缀、后缀操作符. 例如, a + b 调用这样一种操作(映射) + : int × int → int( + 是这个操作符的名字, int × int 描述了这两个输入, 最后的 int 描述的了输出)
  • 一个对象的方法. 例如, bigint1.add(bigint2) 调用这样一种操作(映射) add: Big
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值