#1.1 第一个Java程序
package my.hava.javabasis.lesson;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_1 { public static void main(String [] args) { System.out.println("Hello World"); }}
程序输出
Hello WorldProcess finished with exit code 0
#1.2 用变量做计算 ##1.2.1 读输入 ###如何去读
package my.hava.javabasis.lesson;import java.util.Scanner;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_2 { public static void main(String [] args) { System.out.println("中文"); //读取用户输入 Scanner in = new Scanner(System.in); System.out.println(in.nextLine()); }}
###课堂题目 每次输入的内容只有在按下回车(Enter)键之后才会被程序读到。
A.√ B.× 正确答案: Apackage my.hava.javabasis.lesson;import java.util.Scanner;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_2 { public static void main(String [] args) { System.out.println("中文"); //读取用户输入 Scanner in = new Scanner(System.in); System.out.println("echo:" + in.nextLine()); System.out.println(2+3+"=2+3=" + (2+3)); }}
程序输出
中文hello worldecho:hello world5=2+3=5Process finished with exit code 0
##1.2.2 变量
package my.hava.javabasis.lesson1;import java.util.Scanner;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_2 { public static void main(String [] args) { System.out.println("中文"); //读取用户输入 Scanner in = new Scanner(System.in);// System.out.println("echo:" + in.nextLine()); int price = in.nextInt(); System.out.println("100-" + price + "=" + (100 - price)); }}
输出
中文33100-33=67Process finished with exit code 0
###题目 int price;
这句定义了一个变量 A.√ B.× 正确答案: A 你选对了###变量定义
- 变量定义的一般形式就是:
-
- <类型名称> <变量名称>;
如下为例子
int price;int amount;int price,amount;
###变量的名称
- 变量需要一个名字,变量的名字是一种“标识符”,意识是它是用来识别这个和那个的不同名字。
- 标识符有标识符的构造规则。基本的原则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,Java的关键字(有的地方叫它们保留字)不可以用做标识符。
###Java保留字
###变量类型
int price = 0;
- 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
- Java是一种强类型语言,所有的变量在使用之前必须定义或者生命,所有的变量必须具有确定搞得数据类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。
##1.2.3 赋值
###异常
package my.hava.javabasis.lesson1;import java.util.Scanner;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_2 { public static void main(String [] args) { System.out.println("中文"); //读取用户输入 Scanner in = new Scanner(System.in);// System.out.println("echo:" + in.nextLine()); //变量初始化 int price = 0, amount = 0; System.out.println(price); price = in.nextInt(); System.out.println("100-" + price + "=" + (100 - price)); }}
输出异常
中文0priceException in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:909) at java.util.Scanner.next(Scanner.java:1530) at java.util.Scanner.nextInt(Scanner.java:2160) at java.util.Scanner.nextInt(Scanner.java:2119) at my.hava.javabasis.lesson1.Lesson1_2.main(Lesson1_2.java:18) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)Process finished with exit code 1
###代码
package my.hava.javabasis.lesson1;import java.util.Scanner;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_2 { public static void main(String [] args) { System.out.println("你好"); //读取用户输入 Scanner in = new Scanner(System.in);// System.out.println("echo:" + in.nextLine()); //变量初始化 int amount = 100; int price = 0; System.out.println("[amount]:" + amount); System.out.println("[price]:" + price); price = in.nextInt(); System.out.println(amount + "-" + price + "=" + (amount - price)); }}
###题目 当amount的值为100,price的值为20,以下哪一种写法能输出:100-20=80
A.System.out.println("amount-price="+amount-price);
B.System.out.println(amount+"-"+price+"="+(amount-price));
C.System.out.println("amount-"+price+"="+amount-price);
D.System.out.println(amount-price=(amount-price)); 正确答案: B
###程序
package my.hava.javabasis.lesson1;import java.util.Scanner;/** * Created by zhanpeng on 2016/10/10. */public class Lesson1_2 { public static void main(String [] args) { System.out.println("你好"); //读取用户输入 Scanner in = new Scanner(System.in);// System.out.println("echo:" + in.nextLine()); //变量初始化// final int amount = 100; int amount = 100; int price = 0; System.out.println("[amount]:" + amount); System.out.println("[price]:" + price); System.out.println("请输入票面:"); amount = in.nextInt(); System.out.println("请输入金额:"); price = in.nextInt(); System.out.println(amount + "-" + price + "=" + (amount - price)); }}
输出结果
你好[amount]:100[price]:0请输入票面:100请输入金额:50100-50=50Process finished with exit code 0
##变量课件 ###读输入
Scanner in = new Scanner(System.in);System.out.println(in.nextLine());
- 将第一行抄在笔记本上,任何需要读用户输入的程序都需要这行
- 输入Scan之后,按下键盘上的Alt+/,让Eclipse自动为你补全必要的代码
###运行
- 输入也在终端窗口中
- 红色的方块表示程序正在运行
- 输入时以行为单位进行的,行的结束标志就是你按下了回车键。在你按下回车之前,你的程序不会读到任何东西
###读入一行文字
System.out.println(in.nextLine());
- 让in对象做读入下一行的动作,结果交给System.out这个对象进行打印
###字符串的+
- 用来连接两个字符串形成更长的字符串
System.out.println("Hello" + " world.");//Hello world.System.out.println("Hello" + 2);//Hello2System.out.println("Hello" + 2 + 3);//Hello5System.out.println(2 + 3 + "Hello");//5Hello
###try
- 在输出的时候加上文字表明是否回答而非单纯的重复
###找零计算
- 输入一个表示应该付多少元的数字,比如12,它告诉你88,意思是如果你付100
Scanner in = new Scanner(System.in);int price = 0;price = in.nextInt();int change = 100 - price;System.out.println(change);
###变量
int price = 0;
- 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
- 变量是一个保存数据的地方,当我们需要在程序里保存数据时,比如上面的例子中药记录用户输入的架构,就需要一个变量来保存它。用一个变量保存了数据,它才能参加到后面的计算中,比如计算找零。
###变量定义
- 变量定义的一般形式就是:
-
- <类型名称> <变量名称>;
如下为例子
int price;int amount;int price,amount;
###变量的名字
- 变量需要一个名字,变量的名字是一种“标识符”,意识是它用来识别这个和那个的不同的名字。
- 标识符有标识符的构造规则。基本的原则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,Java的关键字(有的地方叫它们保留字)不可以用做标识符。
###Java保留字
###quiz
- 以下哪些标识符是符合规则的?
-
- currency √
-
- lastName √
-
- fireplace √
-
- _last_name√
-
- xingming√
-
- class×
-
- goto×
-
- 4ever×
-
- time-machine×
-
- Int√
-
- $12×
-
- 我是变量×
###赋值和初始化
- int price = 0;
- 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
- price=0是一个式子,这里的
=
是一个赋值运算符,表示将=
右边的值赋给左边的变量。
###赋值 和数学不同,a=b在数学中表示关系,即a和b的值一样;而在Java中,a=b表示要求计算机做一个动作:将b的值赋给a。关系是静态的,而动作是动态的。在数学中,a=b与b=a是等价的,而在Java中,两者的意思完全相反
###初始化 当赋值发生在定义变量的时候,就像程序中的第7行那样,就是变量的初始化。虽然Java语言并没有强制要求所有的变量都在定义的地方做初始化,但是要求所有的变量在第一次被使用(出现在赋值运算符的右边)之前被赋值
###变量初始化
- <类型名称> <变量名称> = <初始值>;
- int price = 0;
- int amount = 100;
- 组合变量定义的时候,也可以在这个定义中单独给单个变量赋值,如
- int price = 0,amount = 100;
###插入
- 写出以下变量的初始值:
-
- int price,amount =100,age;
回答 price == 0,amount == 100,age == 0
###读整数
- price = in.nextInt();
- 要求in这个对象做读入下一个整数的动作,读到结果赋值给变量price
- 如果用户输入的不是整数会怎样? 会报如下异常
Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at my.hava.javabasis.lesson1.Lesson1_2.main(Lesson1_2.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
###表达式
- "="是赋值运算符,有运算符的式子叫做表达式。
- price=0;
- change = 100 - price;
###try
- 给程序增加一个int类型变量:bill,初始化为100。在计算change时,用变量bill代替100。
- 这个变量在哪里定义合适? **回答:**环境变量并不充分,如果bill不在发生变更,则应该在class声明为类的static final变量。这样在JVM载入时默认会把100值载入。提高效率。
###变量类型
- 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0.
- Java是一种强类型语言,所有的变量在使用之前必须定义或声明,所有的变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也
###常量
- int change = 100 - price;
- 固定不变的数,是常数。直接写在程序里,我们称作直接量(literal)。
- 更好的方式,是定义一个常量:
-
- final int AMOUNT = 100;
###final
- final是一个修饰符,加在int的前面,用来给这个变量加上一个final(最终的)的属性。这个final的属性表示这个变量的值一旦初始化,就不能再修改了。
-
- int change = AMOUNT - price;
- 如果你试图对常量做修改,把它放在赋值运算符的左边,就会被Java发现,指出为
###try
- 让用户输入变量bill的值,而不是使用固定的初始值
###tips
- 程序要求读入多个数字时,可以在一行输入,中间用空格分开,也可以在多行输入
- 每次召唤in.nextInt(),它就等待用户输入一个整数
#1.3 表达式(浮点数、优先级和类型转换) ##浮点数 ###身高5尺7寸?
- 美国人固执地使用英制计量单位,他们习惯用几尺几寸(英尺英寸)来报自己的身高。如果遇到一个美国人告诉你他是5英尺7,他的身高应该是一米几呢?
- (5 + 7/12) * 0.3048 = 1.7018米
###计算身高的程序 - 问题代码
package my.hava.javabasis.lesson1;import java.util.Scanner;/** * Created by yanfa on 2016/10/10. */public class Lesson1_3 { public static void main(String [] args){ int foot; //英尺 int inch; //英寸 Scanner in = new Scanner(System.in); System.out.println("请输入身高:"); System.out.print("英尺:"); foot = in.nextInt(); System.out.print("英寸:"); inch = in.nextInt(); double result = (foot + inch/12) * 0.3048; System.out.println("身高:" + result); }}
错误输出
请输入身高:英尺:5英寸:7身高:1.524
###为什么是1.524
- 因为两个整数的运算的结果只能是整数
-
- 10/3 * 3= 9
- 10和10.0在Java中是完全不同的数
- 10.0是浮点数
###课堂测试 在Java中10/3的结果是?
正确答案:3
###计算身高的程序 - 正确代码 **注意:**在做除法的时候先进行强制类型转换
package my.hava.javabasis.lesson1;import java.util.Scanner;/** * Created by yanfa on 2016/10/10. */public class Lesson1_3 { public static void main(String [] args){ int foot; //英尺 int inch; //英寸 Scanner in = new Scanner(System.in); System.out.println("请输入身高:"); System.out.print("英尺:"); foot = in.nextInt(); System.out.print("英寸:"); inch = in.nextInt(); double result = (foot + (double)inch/12) * 0.3048; System.out.println("身高:" + result); }}
输出结果
请输入身高:英尺:5英寸:7身高:1.7018
###浮点数
- 带小数点的数值。浮点这个词的本意就是小数点是浮动的,是计算机内部表达非整数(包含分数和无理数)的一种方式。另一种方式叫做定点数,不过在Java中不会遇到定点数。人们借用浮点数这个词来表达所有的带小数点的数。
###程序改进
- (foot +inch/12) * 0.3048;
- (foot +inch/12.0) * 0.3048;
- 当浮点数和整数放到一起运算时,Java会将整数转换成浮点数,然后进行浮点数的运算。
###double
- inch是定义为int类型的变量,把int换成double,我们就把它改为double类型的浮点数变量。
- double的意思是双,本来是
双精度浮点数
的第一个单词,人们用来表示浮点数类型
###浮点运算的精度
- 浮点计算是有误差的:
-
- System.out.println(1.2 - 1.1); 输出结果
0.09999999999999987
###整数
- 整数类型不能表达有小数部分的数,整数和整数的运算结果还是整数。计算机里会有纯粹的整数这种奇怪的东西,是因为整数的运算比较快 ,而且占地方也小。其实人们日常生活中大量做的还是纯粹整数的计算,所以整数的用处还是很大的。
###讨论
- 如果把程序里的inch变量换成double类型,那句语句后面的in.nextInt()还正确吗?
**回答:**正确,Java程序会自动从低精度转换成高精度。
###随堂
- 用一个变量meter来记录身高换算的结果,最后在System.out.println()里面输出这个meter变量的值。 ##运算符优先级
###单目运算符
- 只有一个算子的运算符: +,-
int a = 10;int b = -20;System.out.println(a * -b);
###结合关系
- 一般自左向右
- 单目+ - 和赋值=是自右向左
result = a = b = 3 + c;result = 2;result = (result = result * 2) * 6 * (result = 3 + result);//上面的式子先计算了左边的result=,得到result=4,然后在计算右边的result=,得到result=7。则最终结果是168
###插入
- 6 + 5/4 -2=5
- 2 + 2 * (2 * 2 - 2)%2/3 = 2
- 10 + 9 * ((8 + 7) % 6) + 5 * 3 % 3 * 2 + 3 = 40
- 1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10 = -627
###强制类型转换
- 身高是1.524米
- System.out.println((foot + inch /12) * 0.3048 * 100);
###随堂测试 以下哪句能把浮点数转换成整数?
A. (int)12.4
B. int(12.4)
C. int 12.4
D. 12.4=int 正确答案: A 你选对了
###强制类型转换
- 如果想把一个浮点数的小数部分去掉,编程整数
int i = 32 / 3.0;int i = (int)(32 / 3.0);
- (类型)值
###身高?
- System.out.println( (int)((foot
- inch / 12) * 0.3048 * 100));
###强制类型转换
double b = 10.3;int a = (int)b;
- 只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变
###强制类型转换
double a = 1.0;double b = 2.0;int i = (int)a /b;//int i = (int)(a/b);
- 强制类型转换的优先级高于四则运算
double a = 1.0;double b = 2.0;double d = (double) (a /b );