day02
-
类型转换
-
自动类型转换/隐式类型转换
-
-
-
键盘录入
-
导包 import java.util.Scanner
-
创建对象 Scanner sc = new Scanner(System.in);
-
接收键盘录入的数据 int num = sc.nextInt();
-
-
运算符
-
算术运算符
-
+
-
-
-
*
-
/
-
%
-
-
关系运算符
-
'>
-
'>=
-
<
-
<=
-
==
-
!=
-
-
逻辑运算符
-
&
-
|
-
!
-
^
-
-
短路的逻辑运算符
-
&&
-
||
-
-
赋值运算符
-
=
-
+=
-
-=
-
*=
-
/=
-
%=
-
-
自增自减运算符
-
++
-
--
-
-
三元运算符
-
格式: 关系表达式 ?表达式1:表达式2
-
-
-
流程控制语句
-
分类
-
顺序结构
-
选择结构/分支结构
-
循环结构
-
-
1.类型转换
1.1自动类型转换
/*
自动类型转换 小的数据类型向大的数据类型转换,不会造成数据精度丢失
转换格式:
byte --> short
-->int --> long --> float -->double
char
byte和short不能直接转换成char
在参与运算的时候,如果有高类型的数据参与运算,所有数据自动转换成高类型的数据
*/
public class Demo01 {
public static void main(String[] args) {
char c = 'a';
System.out.println(c);
int i = c;
System.out.println(i);
int x = 100;
long y = x;
System.out.println(x);
System.out.println(y);
System.out.println(Float.MIN_VALUE);
System.out.println(Float.MAX_EXPONENT);
//byte和short不能直接转换成char
/*byte b = 10;
short e = 10;
char d = b;
char h = e;
*/
//在参与运算的时候,如果有高类型的数据参与运算,所有数据自动转换成高类型的数据
float f1 = 3.14F;
int f2 = 314;
double f4 = 5.12;
double f3 = f1+f2+f4;
}
}
基本数据类型,字节数,位数,最大值和最小值。
1、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
2、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)
1.2强制类型转换
/*
大的数据类型,向小的数据类型转换,
有可能造成数据精度丢失,
1.如果大的数据类型存储数值,在小的数据类型的取值范围内,就不会造成数据精度的丢失
2.如果大的数据类型存储数值,超出了小的数据类型的取值范围,就会造成数据精度丢失
格式:
目标数据类型 变量名 = (目标数据类型)变量名或值;
*/
public class Demo02强制类型转换 {
public static void main(String[] args) {
int a = 10;
a = 130;
byte b = (byte) a;
System.out.println(a);
System.out.println(b);
}
}
2.键盘录入 Scanner
步骤:
1.导包
import java.util.Scanner
2.创建对象
Scanner sc = new Scanner(System.in);
3.接收数据
int num = sc.nextInt();
// 1.导包
import java.util.Scanner;
/*
步骤:
1.导包
import java.util.Scanner
2.创建对象
Scanner sc = new Scanner(System.in);
3.接收数据
int num = sc.nextInt();
*/
public class Demo01 {
public static void main(String[] args) {
//2.创建对象
Scanner sc = new Scanner(System.in);
//3.接收数据
System.out.println("请输入一个整数:");
int num = sc.nextInt();
System.out.println("键盘录入的数据是:"+num);
//byte b = sc.nextByte();//补全代码 alt+回车
System.out.println("请输入一个字符串:");
String s = sc.next();
System.out.println(s);
/* System.out.println("请输入一行字符串:");
String s1 = sc.nextLine();
System.out.println(s1);*/
}
}
3.运算符
3.1算术运算符
/*
算术运算符:
+:求和
-:求差
*:求积
/:求商
%:求余
数学:5÷3 = 1......2
java:
1.求商
5/3 = 1
3/5 = 0
2.求余
5%3 = 2
3%5 = 3
*/
public class Demo01算术运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//+:求和
int c = a + b;
System.out.println(c);
//-:求差
int d = a - b;
System.out.println(d);
// *:求积
int e = a * b;
System.out.println(e);
//:求商
int f = b / a;
System.out.println(f);
int g = a / b;
System.out.println(g);
//%:求余
int h = b % a;
System.out.println(h);
int i = a % b;
System.out.println(i);
//如果有浮点型数据参与运算,获取的结果是浮点型的
double x = 3.0;
double y = 6.0;
System.out.println(x / y);
}
}
3.2练习
import java.util.Scanner;
/*
键盘录入一个求各个位上数字
分析:
1.键盘录入
导包 import java.util.Scanner
创建对象
Scanner sc = new Scanner(System.in);
接收数据
int num = sc.nextInt();
2.获取这个四位数各个位上数字
2.1 个位 num%10 1234%10==4
2.2 十位 num/10%10 1234/10 ==123 123%10 ==3
2.3 百位 num/100%10 1234/100==12 12%10 ==2
2.4 千位 num/1000%10
*/
public class Demo02练习 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个四位数:");
int num = scanner.nextInt();
// 2.获取这个四位数各个位上数字
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
int qian = num/1000%10;
System.out.println("个位:"+ge);
System.out.println("十位:"+shi);
System.out.println("百位:"+bai);
System.out.println("千位:"+qian);
}
}
3.3字符的加操作
/*
字符的加操作,先把字符转成int类型的ASCII码值,在参与运算,结果是int类型的
byte short char 三种数据类型的数据在参与运算的时候,首先要转成int类型的值,在参与运算,结果是int类型的,
如果有高类型的参与运算结果是高类型的数据
*/
public class Demo03 {
public static void main(String[] args) {
char c = 'a';
int i = c;
System.out.println(i);
int j = 'A';
System.out.println(j);
int x = '0';
System.out.println(x);
int y = '0'+1;
System.out.println(y);
char d = 'A';
int e = d+c;
System.out.println(e);
byte f = 10;
byte g = 20;
int s = g + f;
System.out.println(s);
short s1 = 30;
short s2 = 40;
int s3 = s1 + s2;
System.out.println(s3);
}
}
3.4 字符串的加操作
/*
字符串的加:
字符串的连接
*/
public class Demo04字符串的加 {
public static void main(String[] args) {
System.out.println(1+2+3+4+"hello"+5+6+7+8+9);//10hello56789
System.out.println(1+2+3+4+"hello"+(5+6+7+8+9));//10hello35
}
}
3.5 自增自减运算符
/*
自增自减运算符:
对变量自增一或者对边自减一
++:
--:
*/
public class Demo05自增自减运算符 {
public static void main(String[] args) {
// ++:
// 在单独使用的使用,无论放在变量前面还是后面都是对变量自增一,
// 在参与运算的时候,如果++在变量的后面,先参与运算,后对变量自增一
// 在参与运算的时候,如果++在变量的前面,先对变量自增一,后参与运算
int a = 10;
// a++;
// ++a;
// int b = a++;
int b = ++a;
System.out.println(a);
System.out.println(b);
//--:
//在单独使用的使用,无论放在变量前面还是后面都是对变量自减一
// 在参与运算的时候,如果--在变量的后面,先参与运算,后对变量自减一
// 在参与运算的时候,如果--在变量的前面,先对变量自减一,后参与运算
int c = 20;
// c--;
// --c;
// int d = c--;
int d = --c;
System.out.println(c);
System.out.println(d);
}
}
3.6关系运算符
/*
关系运算符:
>
>=
<
<=
==
!=
关系表达式结果是布尔类型的值 true false
*/
public class Demo06关系运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a>b);//false
System.out.println(a<b);//true
b = 10;
System.out.println(a>=b);//true
System.out.println(a<=b);//true
System.out.println(a == b); //true
b = 30;
System.out.println(a == b); //false
System.out.println(a != b); //true
}
}
3.7逻辑运算符
/*
逻辑运算符: 逻辑运算符两边放的是关系表达式,结果是布尔类型的值 true或false
& :
| :
! :
^ :
*/
public class Demo07逻辑运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
// & : 见false 则false
System.out.println((a>b) & (a>c)); //false & false ==> false
System.out.println((a<b) & (a>c)); //true & false ==> false
System.out.println((a>b) & (a<c)); //false & true ==> false
System.out.println((a<b) & (a<c)); //true & true ==> true
System.out.println("------------------------");
// | : 见true 则true
System.out.println((a>b) | (a>c)); //false | false ==> false
System.out.println((a<b) | (a>c)); //true | false ==> true
System.out.println((a>b) | (a<c)); //false | true ==> true
System.out.println((a<b) | (a<c)); //true | true ==> true
System.out.println("------------------------");
// ^ : 相同为false 不同true
System.out.println((a>b) ^ (a>c)); //false ^ false ==> false
System.out.println((a<b) ^ (a>c)); //true ^ false ==> true
System.out.println((a>b) ^ (a<c)); //false ^ true ==> true
System.out.println((a<b) ^ (a<c)); //true ^ true ==> false
System.out.println("------------------------");
// ! :
System.out.println((a<b)); //true
System.out.println(!(a<b)); //false
System.out.println(!!(a<b)); //true
System.out.println(!!!(a<b)); //false
}
}
3.8短路运算符
/*
短路运算符:
&&: 见false 则false ,左边为false 右边不参与运算
||:见true 则true ,左边为true 右边就不运算
*/
public class Demo08短路运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
/* System.out.println((a++>c) && (b++>c)); //false && false ==> false
System.out.println(a);
System.out.println(b);
System.out.println(c);*/
System.out.println((a++<c) || (b++>c++)); //true || false ==>true
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
3.9赋值运算符
/*
赋值运算符:
= :就是把右边的值赋值给左边变量
复合的赋值运算符 ,隐含了强制类型转换
+= : 变左边变量中的值和右边值相加 把和赋值给左边变量
-= :
*=
/=
%=
*/
public class Demo09赋值运算符 {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
a = 20;
System.out.println(a);
// +=
int b = 30;
b+=10; //b = b+10;
System.out.println(b);
short c = 40;
c+=40;// c = (short) (c+40);
System.out.println(c);
int d = 50;
d-=10;
System.out.println(d); //40
d*=10;
System.out.println(d); //400
d/=20;
System.out.println(d); //20
d%=3;
System.out.println(d); //2
}
}
3.10三元运算符
/*
三元运算符:
格式:
关系表达式?表达式1:表达式2
运算规则:
先计算关系表达式的值,如果为true,取表达式1的值,如果为false,取表达式2的值
*/
public class Demo10三元运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//求两个数的最大值
int max = a > b ? a : b;
System.out.println(max);
//求两个数的最小值
// int min = a > b ? b : a;
int min = a < b ? a : b;
System.out.println(min);
}
}
3.11练习
/*
键盘录入两个数字,求最大值 求最小值
分析:
1.键盘录入
2.使用三元运算符求结果
*/
public class Demo11练习 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入一个整数:");
int num2 = sc.nextInt();
//2.使用三元运算符求结果
int max = num1>num2?num1:num2;
System.out.println("最大值:"+max);
int min = num1<num2?num1:num2;
System.out.println("最小值:"+min);
}
}
3.12练习
import java.util.Scanner;
/*
键盘录入三个数字,求最大值
*/
public class Demo12练习 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//扫描键盘,等待录入
System.out.println("请输入第一个数字:");
int num1 = sc.nextInt();//接收键盘录入的第一个数字
System.out.println("请输入第二个数字:");
int num2 = sc.nextInt();
System.out.println("请输入第三个数字:");
int num3 = sc.nextInt();
//1.求前两个数的最大值,当成临时最大值
int tempMax = num1>num2?num1:num2;
//2.使用临时的最大值和第三个数字比较,求出最终的最大值
int max = tempMax>num3?tempMax:num3;
System.out.println(max);
}
}
3.13 练习
/*
键盘录入一个三位数字,判断这是数字是否是水仙花数,三元运算符 如果是返回true 不是返回false
水仙花:
1.三位数
2.算法:各个位数数字的立方和等于数字本身
3.举栗子:153 = 1*1*1 + 5*5*5 + 3*3*3
*/
public class Demo13练习 {
public static void main(String[] args) {
//1.键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int num = sc.nextInt();
//2.求三位数各个位上数字 153 370 371 407
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
//3.求各个位上数字的立方和
int sum = ge*ge*ge + shi*shi*shi +bai*bai*bai;
//4.使用三元运算符 将立方和和数字本身比较 如果相等 就是水仙花数 返回true 否则是false
boolean flag = sum == num ? true : false;
System.out.println(num+"是水仙花数:"+flag);
}
}