Week 1 计算
1.0 计算机与编程语言
程序的执行:解释和编译(翻译成计算机能懂的机器语言)
1.1 第一个Java程序
JRE:Java运行环境,Oracle网站
Eclipse/IDEA:编程软件
- Alt + / :自动补全代码
- Ctrl + /:注释comment,单行注释
//
,多行注释/**/
1.2 变量与计算
读输入
Scanner in = new Scanner(System.in);
变量定义:<类型名称><变量名称>;
变量名称是一种标识符;标识符由字母、数字和下划线组成,数字不能出现在首位;Java关键字/保留字不能用作标识符;Java语言要求变量在第一次被使用前被赋值。
Java是一种强类型的语言,变量在使用前必须定义或声明,且必须具有确定的数据类型。
常量/直接量(literal):final int AMOUNT = 100;
1.3 浮点数计算
浮点数:带小数点的数值,小数点是浮动的,计算机表达非整数(分数和无理数)的一种方式。浮点计算是有误差的(都是二进制惹的祸)
Java中不会遇到定点数
运算符优先级:单目取负,自右向左 a*-b
强制类型转换:(类型)值
优先级高于四则运算
Week 2 判断
2.1 比较
优先级:算数运算>关系运算>赋值运算
2.2 判断
习惯:if
和else
后面总是用{}
,即使只有一条语句
if(expi){
st1;
}
else if(exp2){
st2;
}
else{
st3;
}
if ( a==b ){} else System.out.println("no");
if ( a==b ); else System.out.println("no");
多路分支:
switch(type){ //控制表达式只能是整数型的结果
case 1: //常量可以是常数,也可以是常数计算的表达式
sentence; // 寻找匹配的case,并执行其后的语句,直到break为止
break;
default:
sentence;
}
x in [-10, 0]
表示“当 x 的取值在 [-10, 0] 的范围内,结果为真,否则为假”。
Week 3 循环
3.1 循环
while
while(<循环条件>){
<循环体语句>
}
do-while循环:循环至少会执行一次
do{
<循环体语句>
}while(<循环条件>);
数数
int number = in.nextInt();
int count = 0;
while(number>0){
number /= 10;
count ++;
}
3.2 循环的例子
Math.radom()
得到一个[0,1)范围内的随机数
整数的分解:%10
得到个位数;/10
去掉个位数
Week 4 循环控制
4.1 for循环
习惯:求和时result初始化为0;求积时resule初始化为1
习惯:只要是for
语句就跟上{}
,即使是空循环
for(初始化; 条件; 单步动作){ // 每一个表达式可以省略
}
Tips for loops
- 如果有固定次数,用for
- 如果必须执行一次,用do-while
- 其他情况用while
复合赋值
i++
变量+1,表达式为变量原值
++i
变量+1,表达式为变量+1后的值
4.2 循环控制
break
vs continue
:跳出循环 vs 跳过循环这一轮剩下的语句进入下一轮,仅对当层循环生效;带标号的break和continue可对那个表示循环起作用。
Outer:
for(;;){
for(;;){
if(){
st1;
break Outer;
}
}
}
goto
:跳出多层循环
for(;;){
for(;;){
if(...) goto OUT;
}
}
OUT:...
4.3 循环的例子
求最大公约数:碾转相除法
Scanner in = new Scanner(System.in);
int a,b,t;
a = in.nextInt();
b = in.nextInt();
int origa = a;
int origb = b;
while(b!=0){ // 如果b=0,a就是最大公约数
t = a % b;
a = b;
b = t;
}
System.out.print(a)
逆序分解整数
Scanner in = new Scanner(System.in);
x = in.nextInt();
do{
System.out.println(x%10);
x /= 10;
}while(x>0);
逆序输出整数
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int y = 0;
do{
y = y*10 + x%10
x /= 10
} while(x>0);
正序输出整数
for(int i=0; i<n; i++){ //n为x的位数,mode为10的n-1次方
System.out.println(x/mode);
x %= mode;
mode /= 10;
}
Week 5 数组
5.1 数组
<类型>[] <名字> = new <类型>[元素个数];
数组变量是数组的管理者而非数组本身
for(<类型><变量>:<数组>){
...
}
数组的大小无须在写程序时就确定
int n; // 从其他来源处获取 n 的值
char[] chars1 = new char[n];
每个数组有一个内部成员length告诉你元素的数量
int m[] = {1,2,3,4,5};
System.out.print(m.length); // m.length为5
5.2 数组计算
素数:遍历sqrt(x)即可
for(int i=3; i<Math.sqrt(x); i+=2){
if(x % i == 0){
isPrime = false;
break;
}
5.3 二维数组
二维数组:int[][] a = new int[3][5];
初始化:
int[][] a ={
{1,2,3,4},
{1,2,3},
};
Week 6 使用对象
6.1 字符类型
单个字符了诶性char
:用单引号表示字符面量1
,a
Java使用Unicode来表示字符,可以表达包括汉字在内的多重字符
逃逸字符:反斜杠+字符,如换行\n
、制表位\t
6.2 包裹类型
包裹类型是一种数据类型,他可以像基础类型定义数据类型,区别在于包裹类型把基本数据类型的数据转换为对象的形式,可以像对象一样参与运算和传递,有一系列方法可供使用,如
Integer.MAX_VALUE
Character.isDigital()
6.3 字符串
字符串:用双引号括起来的0个或多个字符就是一个字符串字面量。String是一个类,String的变量是对象的管理者而非所有者。
String s = new String("a string"); //new=创建
输入字符串
in.next();
读入一个第单词,单词的标志是空格(空格包括空格、tab和换行)in.nextLine();
读入一整行
字符串操作运算:字符串不可变,操作结果均是制造新的字符串(String方法:菜鸟教程>Java String方法)
String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2); // 输出true
字符串的操作:Java菜鸟教程>String类>Sring方法
str.length()
用length()函数获得字符串的长度
str1 == "string"
比较是否为同一个字符串
stri.equals(str2)
比较字符串内容是否相同
Week 7 函数
7.1 函数的定义与调用
public static void sum(int a, int b){
int sum = 0;
sum = a + b;
System.out.print(sum);
调用函数:()
起到了表述函数调用的重要作用
return
:停止函数执行,并送回一个值(习惯:单一出口)
7.2 函数参数与函数内的变量
本地变量:定义在函数内部的变量,如参数,作用于在{}
块内