作业0A: Java语法
语言构造
许多Python基础知识在Java中都有对应的实现,比如循环和if语句。本节将直接比较它们的语法。
变量声明
| Python | Java |
|---|---|
|
|
- 就像Python一样,Java变量也有 类型 。在Java中,声明变量时必须明确说出它的类型。变量的声明类型永远不能改变。有关"静态类型"的更多信息,请参阅第1讲。
- 我们还必须在语句末尾加分号。
类型
| Python | Java | 说明 |
|---|---|---|
bool
|
boolean
|
Python使用
True
和
False
;Java使用
true
和
false
。
|
int
|
int
|
Python的
int
是无界的,而Java的
int
有(很大的)最大值和最小值。
|
float
|
double
|
十进制数值。Java的
double
同样是有界的。
|
str
|
String
|
Java的
String
使用双引号(
"
),可以是任何文本。
|
| 无对应类型 |
char
|
Java的
char
表示
单个
字符,使用单引号(
'
)。
|
注释
| Python | Java |
|---|---|
|
|
Java还有多行注释,以
/*
开头,以
*/
结尾。
while循环
| Python | Java |
|---|---|
|
|
-
条件周围的括号
(和)是必需的。 -
在Java中,
++通常用来代替+= 1。 -
在Java中,我们确实使用
System.out.println来打印。抱歉。 -
我们使用大括号
{和}而不是缩进来包裹属于while循环的代码。Java不要求缩进,但这是好的风格!
for
循环(递增)
| Python | Java |
|---|---|
|
|
在Java中,
for
循环的语法如下:
for (initialization; termination; increment) {
// loop body
}
这大致相当于以下while循环:
| Python | Java |
|---|---|
|
|
while
循环和
for
循环在终止条件为false时退出。比较表中的
for
循环会"直到"
i = 10
时结束。
for
循环(递减)
| Python | Java |
|---|---|
|
|
-
注意Java
for循环中不同的"初始化"、"终止"和"递增"块。 -
与
++类似,--通常用来代替-= 1。 -
比较表中的
for循环会"直到"i < 0时结束。
条件语句
| Python | Java |
|---|---|
|
|
布尔运算符如下:
| Python | Java |
|---|---|
and
|
&&
|
or
|
||
|
not
|
!
|
==
|
==
|
-
注意
elif和else if之间的区别。 -
注意:在Java中,
==用于身份比较,而.equals()用于相等比较。对于基本类型,这两者是一样的,但对于引用类型,可能会不同。对于这个作业,你不需要知道区别;我们稍后会详细学习。
幂运算
| Python | Java |
|---|---|
|
|
注意,Java中的
^
是"异或"运算符,不是幂运算。也就是说,
2 ^ 10
是合法代码,但它会返回
8
,而不是
1024
。
函数声明和使用
| Python | Java |
|---|---|
|
|
-
在Java中,函数有一个特定的返回类型,它位于函数名之前。函数还会指定其参数的类型。
-
当函数不返回任何内容时,它的返回类型为
void。
-
当函数不返回任何内容时,它的返回类型为
-
目前,我们所有的函数前面都会有
public static。我们稍后会学习这些是什么意思。 - 调用函数的方式与Python相同。
字符串
| Python | Java |
|---|---|
|
|
-
在Java中,
String不能直接迭代。我们要么通过索引迭代并使用charAt,要么将其转换为数组(稍后介绍)。 -
在Java中,你可以将任何内容添加到
String中,它会被隐式转换为String,无需显式转换。
程序
既然我们已经介绍了各个语言构造,让我们看看一些使用它们的Java程序。这里有一些简单的例子,如果你忘记了如何做某事,可以参考它们。
Hello World
| Python | Java |
|---|---|
|
|
- 所有Java代码都必须在一个 类 中。我们稍后会学习更多关于类的知识。
-
当Java程序执行时,它会运行
public static void main(String[] args)方法。这与Python不同,Python中的代码可以在函数外执行。
练习
华盛顿大学有大量的Java入门练习,我们将借用它们。对于作业0,请在 Practice-It 上创建一个账户,并完成以下内容:
- Self-Check 1.26: Confusing
-
练习 2.5:
starTriangle -
Self-Check 2.25:
numberTotal -
练习 3.23:
printIndexedor 练习 4.17:stutter -
Self-Check 4.5:
ifElseMystery1 -
练习 4.19:
quadrant
请务必按照练习页面上的说明操作,特别是关于打印和返回的区别!
如果你在练习中遇到困难,一个策略是先用Python解决,然后翻译成Java。如果你在用Python解决时有困难,那没关系,这不是这个练习的重点。如果你想参考Python解答,请参阅下面的下拉菜单。
starTriangle
starTriangle
for i in range(5):
line = ""
for j in range(i + 1):
line += "*"
print(line)
printIndexed
printIndexed
def printIndexed(s):
output = ""
for i in range(len(s)):
output += s[i]
output += str(len(s) - 1 - i)
print(output)
stutter
stutter
def stutter(s):
output = ""
for i in range(len(s)):
output += s[i]
output += s[i]
return output
quadrant
quadrant
def quadrant(x, y):
if x == 0 or y == 0:
return 0
elif y > 0 and x > 0:
return 1
elif y > 0 and x < 0:
return 2
elif y < 0 and x < 0:
return 3
else:
return 4
交付物
完成6个练习后,前往你的 已解决问题 列表,截取表格的截图,然后将截图提交到Gradescope上的作业0A。
注意 :如果你无法将截图转换为Gradescope要求的PDF格式,请尝试使用 这个转换器 。
恭喜!你已经为接下来的几节课做好了准备,并且完成了作业0。第2讲后,你就可以准备阅读作业0B了,但如果你愿意,现在就可以提前开始。
编程语言与口语没有太大区别——特别是,你写的代码越多,就会越熟练。PracticeIt网站有
很多
题目可供练习,你可以随意尝试更多题目。(不过,它们的进度与我们的不完全一致——如果你看到
Scanner
或需要生成随机数,可以跳过那个题目。)
我们还推荐 https://codingbat.com/java/AP-1 ,那里有更高级的Java题目。
这份作业价值 5分 ,截止日期为 1月19日晚上11:59 。