跳转到主要内容 链接 搜索 菜单 展开 文档 (外部链接)

作业0A: Java语法

语言构造

许多Python基础知识在Java中都有对应的实现,比如循环和if语句。本节将直接比较它们的语法。

变量声明

Python Java
i = 0
int i = 0;
  • 就像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
# Th是 是 a single line comment.
// Th是 是 a single line comment.

Java还有多行注释,以 /* 开头,以 */ 结尾。

while循环

Python Java
i = 0
while i < 10:
    print(i)
    i += 1

int i = 0;
while (i < 10) {
    System.out.println(i);
    i++;
}
  • 条件周围的括号 ( ) 是必需的。
  • 在Java中, ++ 通常用来代替 += 1
  • 在Java中,我们确实使用 System.out.println 来打印。抱歉。
  • 我们使用大括号 { } 而不是缩进来包裹属于while循环的代码。Java不要求缩进,但这是好的风格!

for 循环(递增)

Python Java
for i in range(10):
    print(i)

for (int i = 0; i < 10; i ++) {
    System.out.println(i);
}

在Java中, for 循环的语法如下:

for (initialization; termination; increment) {
    // loop body
}

这大致相当于以下while循环:

Python Java
initialization
while termination:
    # loop body
    increment

initialization
while (termination) {
    // loop body
    increment
}

while 循环和 for 循环在终止条件为false时退出。比较表中的 for 循环会"直到" i = 10 时结束。

for 循环(递减)

Python Java
for i in range(9, -1, -1):
  print(i)

for (int i = 9; i >= 0; i --) {
  System.out.println(i);
}
  • 注意Java for 循环中不同的"初始化"、"终止"和"递增"块。
  • ++ 类似, -- 通常用来代替 -= 1
  • 比较表中的 for 循环会"直到" i < 0 时结束。

条件语句

Python Java
if i % 3 == 0 and i % 5 == 0:
    print("FizzBuzz")
elif i % 3 == 0:
    print("Fizz")
elif i % 5 == 0:
    print("Buzz")
else:
    print(i)

if (i % 3 == 0 && i % 5 == 0) {
    System.out.println("FizzBuzz");
} else if (i % 3 == 0) {
    System.out.println("Fizz");
} else if (i % 5 == 0) {
    System.out.println("Buzz");
} else {
    System.out.println(i);
}

布尔运算符如下:

Python Java
and &&
or ||
not !
== ==
  • 注意 elif else if 之间的区别。
  • 注意:在Java中, == 用于身份比较,而 .equals() 用于相等比较。对于基本类型,这两者是一样的,但对于引用类型,可能会不同。对于这个作业,你不需要知道区别;我们稍后会详细学习。

幂运算

Python Java
x = 2**10
int x = Math.pow(2, 10);

注意,Java中的 ^ 是"异或"运算符,不是幂运算。也就是说, 2 ^ 10 是合法代码,但它会返回 8 ,而不是 1024

函数声明和使用

Python Java
def greet(name):
    return "Hello, " + name

# Elsewhere...
print(greet("Josh"))
public static String greet(String name) {
    return "Hello, " + name;
}
// Elsewhere...
System.out.println(greet("Josh"));
  • 在Java中,函数有一个特定的返回类型,它位于函数名之前。函数还会指定其参数的类型。
    • 当函数不返回任何内容时,它的返回类型为 void
  • 目前,我们所有的函数前面都会有 public static 。我们稍后会学习这些是什么意思。
  • 调用函数的方式与Python相同。

字符串

Python Java
s = "hello"
s += " world"
s += str(5)
s_length = len(s)
substr = s[1:5]
c = s[2]
if "hello" in s:
    print("\"hello\" in s")

for letter in s:
    print(letter)

String s = "hello";
s += " world";
s += 5;
int sLength = s.length();
String substr = s.substring(1, 5);
char c = s.charAt(2);
if (s.indexOf("hello") != -1) {
    System.out.println("\"hello\" in s");
}
for (int i = 0; i < s.length(); i++) {
    char letter = s.charAt(i);
    System.out.println(letter);
}
  • 在Java中, String 不能直接迭代。我们要么通过索引迭代并使用 charAt ,要么将其转换为数组(稍后介绍)。
  • 在Java中,你可以将任何内容添加到 String 中,它会被隐式转换为 String ,无需显式转换。

程序

既然我们已经介绍了各个语言构造,让我们看看一些使用它们的Java程序。这里有一些简单的例子,如果你忘记了如何做某事,可以参考它们。

Hello World

Python Java
print("Hello World")
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
  • 所有Java代码都必须在一个 中。我们稍后会学习更多关于类的知识。
  • 当Java程序执行时,它会运行 public static void main(String[] args) 方法。这与Python不同,Python中的代码可以在函数外执行。

练习

华盛顿大学有大量的Java入门练习,我们将借用它们。对于作业0,请在 Practice-It 上创建一个账户,并完成以下内容:

请务必按照练习页面上的说明操作,特别是关于打印和返回的区别!

如果你在练习中遇到困难,一个策略是先用Python解决,然后翻译成Java。如果你在用Python解决时有困难,那没关系,这不是这个练习的重点。如果你想参考Python解答,请参阅下面的下拉菜单。

starTriangle

for i in range(5):
    line = ""
    for j in range(i + 1):
        line += "*"
    print(line)

printIndexed

def printIndexed(s):
    output = ""
    for i in range(len(s)):
        output += s[i]
        output += str(len(s) - 1 - i)
    print(output)

stutter

def stutter(s):
    output = ""
    for i in range(len(s)):
        output += s[i]
        output += s[i]
    return output

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