零基础学Java语言_翁恺 自学笔记

/ 0评 / 0赞 / 

本次自学的是零基础学Java语言教程-翁恺
https://www.icourse163.org/course/ZJU-1001541001?tid=1465613445

使用了官方汉化,汉化教程见文章底部

计算:

变量常量:

变量定义的一般形式是
<类型名称><变量名称>;

定义一个常量:

final int amount = 100;

输入输出:

System.out.print("请输入票面");
amount = in.nextInt();
System.out.print("请输入金额");
price = in.nextInt();

输出字符串:请输入票面
读取一个用户输入的int
输出字符串:请输入金额
读取一个用户输入的int

System.out.print("请输入金额:");
//这个是不回车
System.out.println("请输入金额");
//这个是输出之后回车

浮点数:

double inch;
inch = in.nextInt();
inch = in.nextDouble();

可以如第二行把整数交给double

类型转换:

System.out.println((int)((foot+inch/12.0)*0.3048*100));

在结果前加(int)

这是把它右边的数变成int,所以这样不行:

foot = (int)30/3.0

这样才行:

foot = (int)(30/3.0)

要注意的是 并不会改变原来的值

int a = (int)b;

判断和分支:

注释:

注释的//和/**/和c一样

比较:

==
!=
>
>=
<
<=

跟c一样

所有关系运算符的优先级比算术运算低 比赋值高

bool:

java里是有true和false的,并且true和false之间没有大小关系

c没有bool类型,Java有并且bool就是bool不是数值。

浮点数比较:

“1.0”和“十个0.1相加”之间进行比较是否相等,他们的结果不是true

因为浮点数不是精确的,所以需要用另外的方法

System.out.println(Math.abs(a-b) < 1e-6);

分别是 求绝对值 小于 1乘10的负六次幂(科学计数法)

if-else

if (判断对错)

如果if括号内是true那就执行{}内的语句否则跳过{}。

跟c一样不加{}也行

else总是和最近的if匹配

建议ifelse后面总是加{}

级联:
if
else if
else if
else

单一出口

switch-case

if和switch跟c一模一样,一点都不带改的

do-while:至少执行一次

for也完完全全一模一样

+=和-=和/=等等也一样,i++也可以用

i++和++i的区别也一样

break和continue也一样

JAVA的多重循环退出方法:

这个例子是计算某个价钱可以用多少零钱来换,现在的需求是计算出第一个就退出,但是如果是c的话就只能break的接力(或者goto),而正如图所示,JAVA可以使用“标号”来标记第一个for循环,然后直接跳出多重循环。

Java的逻辑类型(boolean):

关系运算的结果是一个逻辑值,true或false,这个值可以保存在一个对应的逻辑类型的变量中,这样的变量类型是boolean

布尔(Boolean)是为了纪念George Boole对逻辑计算的贡献

逻辑运算的运算符也是一样的:&&和||和!

逻辑运算符的优先级:

!取反>&&与>||或

!done && (count > MAX)

所以上面的是先算取反,然后算括号内的,最后做"与"的判断

所有的单目运算符的优先级都很高

带格式的输出:

System.out.printf("请输入票面");

哦我的上帝,printf原来在这里等着呢,如果希望像c那样控制输出,就要从这样改成这样写:

System.out.println(sum);
System.out.printf("%.2f", sum);

等下等下,这不就完全变成c语言的形状了吗

数组:

定义:

<类型>[] <名字> = new <类型>[元素个数];
int[] grades = new int[114514];
int [] numbers = new int[100];

一旦创建,不能改变大小

int[] numbers[] = nwq int[4];
numbers[0] = 11;
numbers[1] = 4;
numbers[2] = 51;
numbers[3] = 4;

元素个数必须是整数,元素个数必须给出,元素个数可以是变量

数组的length:

每个数组有一个内部成员length,会告诉你它的元素的数量

for (int i = 0; i < 100; i++) {
	sum += a[i];
}
//最好是变成这个:
for (int i = 0; i < a.length; i++) {
	sum += a[i];
}

直接初始化数组:

用c的方法:

int[] asd = {1};
int bbc[] = {0};
System.out.printf("%d", asd[0]);
System.out.printf("%d", bbc[0]);

用这种方法不可以设置数组的大小,必须初始化。

数组变量并不是数据的所有者:

如果定义一个普通的变量,那么就在此处创建了空间,普通变量就是空间里的数据的所有者

定义一个数组变量,会在不知道的地方创建数组的空间

数组变量只是管理者

无论是用什么方法制造出来的数组都是这样的(包括用{}初始化的),

所以如果写入这样的代码:

int[] b = a;

那么只是让b也一起去管理a管理的变量,这个时候就是两个管理者管理一串数组

所以这个时候进行b[0] = 16,那么a[0]也等于16

复制数组必须使用便利的方法逐个的拷贝。

for-each循环:

for (int k : 某个数组) {
	if (k == 想找的那个数) {
		found = true;
		break;	
	}
}

对于"某个数组"中的每一个元素,循环的每一轮都会将其拿出来作为一个k

k在第一次for的循环等于数组的第0个,第二次是数组的第1个。

k是不断变动的,简单说就是每次循环都会遍历每一个元素然后让k等于这个数。

for与数组的例子:

最基础的方法:

Scanner in = new Scanner(System.in);

int x = in.nextInt();//输入一个数 即将判断它是不是素数
boolean isPrime = true;//默认为是素数

if (x == 1) {
	isPrime = false;
}
for (int i = 2; i < x; i++) {
	if (x % i == 0) {
		isPrime = false;
		break;
	}
}

if (isPrime) {
	System.out.println(x+"是素数");
}
else {
	System.out.println(x+"不是素数");
}

对于n要循环n-1遍,当n很大时可以看作n遍

去掉偶数的改进方式:

Scanner in = new Scanner(System.in);

int x = in.nextInt();//输入一个数 即将判断它是不是素数
boolean isPrime = true;//默认为是素数

if (x == 1 || (x%2 == 0 && x!= 2)) { //1不是素数 或者 (不是2的情况下2的倍数也不是) 注意此处&&比||优先级高
	isPrime = false;
}
else {//去掉2的倍数后从3开始按传统方法判断
	for (int i = 3; i < x; i+=2) {
		if (x % i == 0) {
			isPrime = false;
			break;
		}
	}

}

if (isPrime) {
	System.out.println(x+"是素数");
}
else {
	System.out.println(x+"不是素数");
}

如果x是偶数那么立刻结束判断,否则要循环(n-3)/2+1遍,n很大时就是n/2遍

构造素数表(计算机思维):

欲构造n以内的素数表

  1. 令x为2
  2. 将2x、3x、4x直至ax<n的数标记为非素数
  3. 令x(循环正指着的位置)为下一个没有被标记为非素数的数,重复步骤2;
    直到所有的数都已经尝试完毕(到达设定的素数表的边缘)

本笔记内直接或间接引用了如下内容:

发表回复

您的电子邮箱地址不会被公开。