:::note info
以下为个人学习笔记和习题整理
课程:零基础学 Java 语言 - 浙江大学 - 翁恺 @ 中国大学 MOOC
https://www.icourse163.org/course/ZJU-1001541001
:::

# 课堂笔记

# 读输入、字符串输出

scanner
import java.util.Scanner;
...
Scanner in = new Scanner(System.in);
// 输入 Scan 之后,按下键盘 Alt + “/” 键,Eclipse 下自动补全。
System.out.println(in.nextLine());
// 让 in 这个对象做读入下一行的动作,结果交给 System.out 这个对象去打印一行。
// 字符串的 + 用来连接两个字符串形成更长的字符串。
System.out.println("Hello" + " world.");
System.out.println("Hello" + 2);
System.out.println("Hello" + 2 + 3);
System.out.println(2 + 3 + "Hello");

tips:

  • System.out.println 会换行, System.out.print 则不会换行
  • 出现警告: Resource leak: 'in' is never closed ,可以在函数的最后加入
in.close();// 释放

# 变量

  • 形式:<类型名称> < 变量名称 > = < 初始值 >
    int price, amount; // 同时定义两个变量
    int price = 0; // 定义变量并赋值
    int price, amount = 100, age;

  • 类型名称:Java 是一种强类型语言,所有变量在使用前必须定义或声明,所有变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,程序运行过程中也不能改变变量的类型。

  • 变量名称:又称标识符,只能由字母、数字、下划线构成,数字不能出现在第一个位置。此外,Java 的保留字也不能用作标识符。

  • Java 的保留字列表

abstractdoimplementsprotectedthrows
booleandoubleimportpublictransient
breakelseinstanceofreturntrue
byteextendsintshorttry
casefalseinterfacestaticwhile
catchfinallongstrictfpvoid
charfinallynativesupervolatile
classfloatnewswitch
const*fornullsynchronized
continuegoto*packagethis
defaultifprivatethrow
  • 以下哪些标识符是符合规则的?

# 常量 final

final int AMOUNT = 100;
//final 是一个修饰符,表示这个变量的值一旦初始化,就不能再修改了。

# 变量类型

# 整数 int

int price = in.nextInt();
  • 如果用户输入的不是整数,则会报错 java.util.InputMismatchException
  • 程序要求读入多个数字时,可以在一行输入,中间用空格分开,也可以多行输入。
  • 每次召唤 in.nextInt() ,它就等待用户输入一个整数。
  • 两个整数的运算结果只能是整数。
  • 在 Java 中, 1010.0 是完全不同的数。

# 浮点数 double

  • 浮点数运算有误差:由于二进制的自身限制,浮点计算需要将十进制先转换为二进制,然后对二进制数进行计算,因此导致误差。
System.out.println(1.2-1.1);
// 结果为 0.09999999999999987
  • 整数类型不能表达有小数部分的数;整数运算速度快,占内存小;日常中整数运算多。

# 赋值运算

# 强制类型转换

  • 浮点数和整数放在一起运算时,Java 会将整数转换成浮点数,然后进行浮点数运算。
  • 强制性转换的优先级高于四则运算。
double a = 1.0;
double b = 2.0;
int i = (int)a/b; // 会报错
int i = (int)(a/b); // 不会报错

# 运算符优先级

  • 单目运算符 + - 优先级最高
  • 结合关系一般自左向右,单目 + - 和赋值 = 自右向左。
result = a = b = 3 + c;
result = 2;
result = (result = result * 2) * 6 * (result = 3 + result);

# 复合赋值

  • 5 个算术运算符, + - * / % ,可以和赋值运算符 = 结合起来,形成复合赋值运算。注意,两个运算符中间不要有空格。
total += (sum+100)/2;
total = total + (sum+100)/2;
total * = sum+12;
total = total*(sum+12);
total /= 12+6;
total = total / (12+6);
  • 递增递减运算符 ++ -- ,给变量 + 1 或 - 1
  • 前缀后缀:
a = 14;
t1 = a++; //t1 先被赋值为 a 即 14, a 自加到 15
t2 = ++a; //a 先自加到 15,t2 被赋值为 a 即 15

# 编程题

# 题目 1. 温度转换(5 分)

  • 题目内容
    写一个将华氏温度转换成摄氏温度的程序,转换的公式是:

    °F = (9/5)*°C + 32

    其中 C 表示摄氏温度,F 表示华氏温度。

    程序的输入是一个整数,表示华氏温度。输出对应的摄氏温度,也是一个整数。

    提示,为了把计算结果的浮点数转换成整数,需要使用下面的表达式:

    (int)x;

    其中 x 是要转换的那个浮点数。

    注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能。这道题目要求转换后的数字,程序就只能输出这个数字,除此之外任何内容都不能输出。

  • 输入格式
    一个整数。

  • 输出格式
    一个整数。

  • 输入样例
    100

  • 输出样例
    37

# 解题代码

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		// 获得输入的整数
		int fahrenheit = in.nextInt();
		// 计算摄氏度
		double centigrade = (fahrenheit - 32) / (9 / 5.0);
		// 将浮点数转换为整数输出
		System.out.println((int)centigrade);
	}
}