复习:
- 理解什么跨平台特性
- jvm、jre、jdk
- jdk的下载、安装、配置
- 编译:javac 源文件名.java 执行:java 类名
- 关键字、标识符、注释
- 常量 (整数、浮点、布尔、字符、字符串、null)
- 变量
强类型语言,在内存中开辟的空间必须确定大小。
格式: 数据类型 变量名 = 数据;
数据类型:
引用类型:数组[] 类class 接口interface 枚举enum 注解annotation
基本类型:
整数: byte short int long
浮点: float double
布尔: boolean
字符: char
目标: - 基本数据类型间的转换问题
- 运算符
- 扫描器
- 流程控制语句–分支语句
1.基本数据类型间的转换问题
自动转换:(不需要手动写代码)
小类型自动提升类型,与大类型一致。
Byte、short ==> int ==> long ==> float ==> double
boolean不参与转换
字符:做计算提升类型为 int类型
总结: byte、short、char ==> int ==> long ==> float ==> double
强制转换:(需要手动写代码)
大类型—>小类型
格式: (要转换的类型)
注意:强转后,数据的精确程度可能会降低,因此使用时要慎用。
2.运算符
算术运算符:
二元:+ - * / %(取模,取余数) +连接符
一元:++自增 --自减
实例:
public class Demo3{
public static void main(String[] args){
//整数除以整除结果是整数
//数据中有浮点类型,结果才会是浮点类型
System.out.println(7896/1000); //7
System.out.println(15 / 3.0); //5.0
int a = 10;
//a++;
//++a; // a = a + 1;
//放在某个变量的前边或后边,表示给当前的变量进行+1的求和。
//结合使用:放在前边和放在后边是有区别的
//int b = a++; //后边: 先取出a的值,做计算,然后再计算a++
int b = ++a; //前边:先进行a++,然后再做其他计算
System.out.println(b);
System.out.println(a);
int m = 10;
int n = ++m + m++ + m-- + --m;
//= 11 + 11 + 12 + 10
System.out.println(n);
System.out.println(m);
//取余数运算
System.out.println(6 % 4); //2
System.out.println(4 % 6); //4
System.out.println(4 % 2); //0
//有负数出现,最终结果是正数还是负数看左边的数
System.out.println(4 % -6);
//+ : 字符串连接符
// 字符串可以与任意类型做连接计算,最终结果也是字符串类型
System.out.println("5 + 5 = " + (5 + 5));
}
}
赋值运算符:
= += -= = /= %=
比较运算符:
运算后的结果是:boolean类型。> >= < <=
== : 比较左右两边是否相等,相等是true,否则是false
!= : 比较左右两边是否不等,不等是true,否则是false
逻辑运算符:
作用:是用来连接值为boolean类型的表达式的。
运算后的结果是:boolean类型。
&: and与,连接的表达式值都是true,最终结果才是true,否则是false
|: or或,连接的表达式值都是false,最终结果才是false,否则是true
!:not非,取反的意思, !true = false, !false = true
短路与:&&
一旦计算出结果为false了,后边不再进行计算,直接判定结果为false
短路或:||
一旦计算出结果为true了,后边不再进行计算,直接判定结果为true
三元运算符:
三元:指的是需要三个操作数(表达式)
实例
public class Demo4{
public static void main(String[] args){
byte a = 10;
// a = (byte)(a + 10); // 步骤:1.a+10的和 2.将和结果赋值给a
a += 10; //好处:1.提高运算效率 2.自动完成强转操作
// a = b + c; a = a + b;模板
System.out.println("a = "+ a);
// a *= 10; // a = a * 10;
System.out.println("-------------------------------------------------------");
System.out.println(5 > 3);
System.out.println(5 < 3);
System.out.println(5 == 3);
System.out.println(5 != 3);
System.out.println(5 > 3 & 10 < 8);
System.out.println(5 > 3 | 10 < 8);
System.out.println(!(5 < 3));
int x = 10, y = 8;
System.out.println( x > 5 && ++ y > 6);
System.out.println("y = " + y);
System.out.println("-------------------------------------------------------");
//三元运算符: 条件表达式 ?表达式1 : 表达式2;
int num = false ? 5 : 7;
System.out.println("num = " + num);
//判断某一个数是否是偶数
String s = (num % 2 == 0 ? "是偶数" : "不是偶数");
System.out.println(s);
}
}
格式:
条件表达式 ? 表达式1 : 表达式2;
条件表达式的结果一定是boolean类型。
规则:先计算条件表达式,如果结果是true,最终执行表达式1;
如果结果是false,最终执行表达式2。
3.扫描器——键盘录入
步骤:
- 在class上边,写一条语句: import java.util.*;
- 创建扫描器:Scanner 变量名 = new Scanner(System.in);
- 通过扫描器,扫描录入的数据:变量名.nextInt()
- 对扫描到的数据进行想要的计算
实例:
//1.导包语句
import java.util.*;
public class Demo5{
public static void main(String[] args){
//2.创建扫描器
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个整数:");
//3.通过扫描器,扫描录入的int类型的数据
//定义变量,存储扫描到的数据
int num1 = sc.nextInt();
int num2 = sc.nextInt();
//4.对数据进行计算
System.out.println(num1+num2);
//输入两个整数,打印两个整数的大数。
int max = num1 > num2 ? num1 : num2;
System.out.println("大数是:"+max);
}
}
4.流程控制语句——分支语句
程序执行到某一行时,有多个执行顺序,最多选择其中一个执行顺序去执行。
特点:写的多,执行的少
判断语句:
关键字:if else
-
if(条件表达式){
. . . . . .
}
条件表达式结果是boolean类型。
条件表达式结果是true,执行大括号中的代码,执行语句外的后续的代码
条件表达式结果是false,跳过大括号中的代码,执行语句外的后续的代码 -
if(条件表达式)){
语句块1;…
}else{
语句块2;…
}
条件表达式结果是boolean类型。
条件表达式结果是true,执行语句块1,执行语句外的后续的代码
条件表达式结果是false,执行语句块2,执行语句外的后续的代码 -
if(条件表达式1){
语句块1;…
}else if(条件表达式2){
语句块2;…
}else if(条件表达式3){
语句块3;…
}…else{
语句块n;…
}
条件表达式的结果是boolean类型。
先执行条件表达式1,结果是true,执行语句块1,整个语句结束,执行语句外的后续的代码;如果是false,执行条件表达式2,结果是true,执行语句块2,整个语句结束,执行语句外的后续的代码;如果是false,执行条件表达式3,…以此类推,当所有的条件表达式结果是false,执行语句块n,整个语句结束,执行语句外的后续的代码;
实例:
import java.util.*;
public class Demo6{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个整数:");
int a = sc.nextInt();
int b = sc.nextInt();
if(a > b){
System.out.println("a = " + a);
}else{
System.out.println("b = " + b);
}
//输入一个整数,判断其是否是3的倍数。
System.out.println("请输入一个整数:");
int num = sc.nextInt();
if(num % 3 == 0){
System.out.println(num+"是3的倍数");
}else{
System.out.println(num+"不是3的倍数");
}
}
}
5.课后习题
选择题:
1.执行下列程序段后,m,x,y的值分别是? ( B )
int x = 2,y = 4;
boolean m;
m = ++x > y --;
A. true,2,4 B. false,3,3 C. true,3,3 D.false,2,4
2.设有如下变量,以下哪些语句编译不出错? ( B )
char c = ‘c’;
int i = 10;
double d = 10;
long l = 1;
String s = “Hello”;
int a = 2;
A. c=c+i; B. s+=i; C. i+=s; D.c+=s;
3. short s = 10;
s = s + 10;
System.out.println("s = " +s);
以上代码能否编译?说明为什么?
答:不能,s是short型,数字10默认是int型,所以将s+10赋值给s会造成数据的损失
4.定义三个整数变量,获取其最大值,并打印。
答:
import java.util.*;
public class zy4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请依次输入3个不同的整数");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
if (num1>num2 & num1>num2 ){
System.out.println(num1+"最大");
}else if(num2>num1 & num2>num3){
System.out.println(num2+"最大");
}else if(num3>num1 & num3>num1){
System.out.println(num3+"最大");
}
}
}
5.输入一个三位整数,判断是否是水仙花数。
水仙花数:每个位上的数字立方相加之和等于原数本身。
如:153 = 1的立方+3的立方+5的立方
思路: 1. 定义变量 int n ;
2. 先得到 n 的百位,十位,个位的数字,使用 if 判断他们的立方和是否相等
3. n 的百位 = n / 100 ——赋值为n1
4. n 的十位 = n % 100 /10 或者 n / 10 % 10——赋值为n2
5. n 的个位 = n % 10——赋值为n3
6. 将 n13+n23+n33 == n ;与 if 语句相结合;
答:
import java.util.*;
public class zy5 {
public static void main(String[] args) {
int ge,shi,bai;
Scanner sc =new Scanner(System.in);
System.out.println("请输入一个三位数");
int num = sc.nextInt();
ge = num%10;
shi = num%100/10;
bai =num/100;
if(num>=100 && num<=1000){
if(ge*ge*ge+shi*shi*shi+bai*bai*bai == num ){
System.out.println(num + "是水仙花数");
}else{
System.out.println(num + "不是水仙花数");
}
}else{
System.out.println("请输入100至1000以内的数");
}
}
}