Java基础系列之数据类型转换及键盘录入

昨日回顾:
介绍java
java是一门语言 95年高司令
java的三个方向
java的优点
jdk和jre和jvm的关系
jdk的下载和安装
HelloWorld案例
dos命令
配置环境变量
helloworld的编写编译运行
HelloWorld的解释
书写规范
notepad++
java语法
程序基本组成
注释 (非必须)
关键字
标识符
数据
常量
10
10.14
true
‘a’
“abbc”
null
变量
数据类型 变量名 = 常量值;
数据类型
基本类型
byte 1个
short 2
int 4
long 8
float 4
double 8
boolean 1个 true false bit 0 1 — java的官方文档 boolean类型没有明确的大小。
char 2
引用类型
类 String
接口
数组
注意事项:
符号
基本符号
{};""’’.
运算符号
键盘录入

今日内容:
类型转换(☆☆☆☆☆)
隐式类型转换:
规则: 是从小范围的数据类型 直接转到 大范围的数据类型
范围的排序:
byte < short = char < int < long < float < double

		举例:
			int a =10;
			long b = a; 
		
		用途: 比如两个软件进行交互, 对方发给你一个整数, 我就需要用long类型去接收。因为你不确定他给传的是一个多大的证书,
			所以你应该  不管他发给你多大的证书, 你都应该接收, 你就可以用 最大的整数类型 long去接收。
		
		运算中的隐式类型转换: (运算的原理: 不同的数据类型进行运算,必须先统一为同一种类型才可以运算,否则不能运算。)
			1:比int大(或者等于)的类型, 在进行运算的时候, 小类型会自动提升为大类型进行运算:
				class Demo {
					public static void main(String[] args){
						long lo = 10L;
						double d = 3.14;
						//long lon = lo + d; // 编译报错。   lo会先提升为 double类型。然后再和 double类型的d进行运算 最后的结果是double类型。
						//long lon = (long) lo + d; // 编译报错 
						long lon = (long)(lo +d) ; // 正确

						double d1 = lo + d; // 正确。
					}
				}
			
			2:比int小的数据类型, 在进行运算的时候,所有的都要提升为 int类型 再去运算。
				class Demo {
					public static void main(String[] args){
						byte b = 10;
						short s= 20;
						//short sh = b +s; // 编译报错  b 和s 都会提升为int类型  所以最后的结果也是int类型。
						//short sh = (short) b + s ; // 编译报错
						short sh = (short)(b+s); // 正确的

						int a = b +s; // 正确的。
					}
				}

	强制类型转换:
		规则: 是从大范围的数据类型 强制转到 小范围的数据类型
			1:明确能转过去,数据是正确的, 这时候可以强制类型转换。
				int a = 10;
				byte b = (byte)a; 
			
			2:不推荐你使用的,  明知道转过去 撑不了这么大的数据, 还要继续转
				int a = 200;
				byte b = (byte)a;  // a 已经不是200了,    不确定的数字
			
			3:强化去除小数点后面的数据
				double d = 3.14;
				int a = (int) d; // a 就是3了。
	
	类型转换的注意事项:
		1:boolean类型 不参与任何的类型转换
			boolean b = true;
			int a = b; // 编译报错。
			int c = (int) b;
		
		2:常量优化机制
			写一个整数常量的时候, 整数常量也是有数据类型的, int类型,
				System.out.println(10); // 10 是常量 同时也是int类型的数据
			
			比int小的类型 才有常量优化机制:
				byte a = 100; // 正确的。 100虽然是int类不假,依然可以赋值, 这就叫做常量优化机制。
				// 底层 byte a = (byte)100;

				// 只能是常量有 优化机制
				int b = 100;
				//byte c = b; // 编译错误  b 是变量 不是常量。

				byte d = 100+20; // 正确的  常量的运算, 在编译成class期间, 就已经把 100+20  变成了120 
					// 也就是说 等这句话翻译到了class文件里面 就变成了 byte d = 120; // 就又符合常量优化机制了。

				byte e = 100;
				byte f = e+20 ; // 编译报错。  e是变量
			
			写一个小数常量的时候,小数常量也是有数据类型的, double类型。
				System.out.println(31.4); // 31.4 是常量  同时也是 double数据类型的。

				double d = 31.4;
				//float f = 31.4 ; // 编译报错。 比int大的类型 没有常量优化机制。  所以double类型不能直接赋值给 float类型。
				float f = (float)31.4;
				
				float fl = 31.4F; // 你31.4 默认是double类型, 能不能我们写一个小数的时候 让他默认是 float类型呢, 当然可以了, 你只要在小数后面加一个F 那么这个小数 就会被当做float类型啦。

		3: long类型的数据后面 为什么要加L
			class Demo {
				public static void main(String[] args){
					int a = 100;
					long lo = a; // 正确 隐式类型转换

					long lon = 100; // 正确。  既然是正确的 那么为什么老师一直说 让我在long类型的数据后面 加一个L呢 实在不懂。

					System.out.println(100); // 100 是int类型

					//System.out.println(10000000000); //100亿   int类型  (int类型的数据 最大到21亿左右)
					// 此时 报错了,  100亿已经超过了int数据类型
					// 但是 直接写一个 整数常量 确实就是int类型的啊, 所以肯定报错。
					// 所以 我们就想 我们能不能写一个整数的时候 让jvm把他当做是一个long类型的数据呢,而不是int呢, 可以啊 你只需要在数据后面加一个 L就可以了。

					System.out.println(10000000000L);

					long lo = 100;
				}	
			}
	
运算符号(☆☆☆☆☆)
	算术运算符 : + - * / %
		+ :
			System.out.println(10+10); // 加号
			System.out.println(+10); // 正号
		
		- : 
			System.out.println(10-10); // 减号
			System.out.println(-10); // 负号
		
		/ : 
			System.out.println(10 / 4); //2 
			System.out.println(10.0 / 4); //2.5
			System.out.println(10 / 4.0); //2.5
			System.out.println(10.0 / 4.0); //2.5

			//结论:整数相除得到整数 要想得到小数必须有小数参与运算。

				// 原因: 两种不同的数据类型是没有办法运算的。 所以必须统一为同一种类型才可以运算。
				System.out.println(10 / 4); // 2
				System.out.println(10.0 / 4); //2.5
		
		% : 
			System.out.println(10%3); //1
			System.out.println(-10%3); //-1
			System.out.println(10%-3); //1 
			System.out.println(-10%-3); //-1

			//结论:取到的余数的符号  取决去 % 号左侧的数的符号。
				
				//原因:
					System.out.println(10%3); //商3   10-3*3 = 1
					System.out.println(-10%3); //商-3  -10 -(-3*3) = -10+9 = -1
					System.out.println(10%-3); //商-3  10-(-3*-3) = 10-9 = 1
					......
		
		字符的运算:
			
			System.out.println(10+20.14); //30.14

			//System.out.println(true + 10); //编译报错
			System.out.println('a' + 10);
							//107  'a' 先提升为int 97  再和10进行相加。

			ASCII
				'a' --97
				'A' --65
				'0' --48
		
		字符串的+预算:
			System.out.println("a"+10);
							// 字符串
							// "" 双引号代表的是字符串   属于数据类型中的引用类型里面的类 
							// 字符串在和其他类型进行 + 运算的时候, 其他的类型一概转换为字符串类型 再运算。
							// "" +10  10先转换为 "10" 然后在和“a”进行运算。
							// 字符串的+运算   是拼接。
							// a10
			
		案例1:
			System.out.println(10+10+20+"java"+20+20+"javaee"+(20+20)+"javaee"+10+("java"+10)+20);
							 // 10+10+20+"java"+20+20+"javaee"+40+"javaee"+10+"java10"+20
							 // 40java2020javaee40javaee10java1020
		
		案例2:
			键盘录入一个三位数。把数值进行再分,拆分出每一位上的数
			int a = 389;
			/*
			3
			8
			9
			*/
			int ge = a%10;
			int shi = a/10 %10;
			int bai = a/10/10 %10;
				
		案例3:
			键盘录入两个数 根据录入的数 打印出如下效果
			int a = 6;
			int b = 3;
			
			// 6 * 3 = 18
			System.out.println(a+" * "+b+" = "+(a*b));
		
		自增自减运算符: ++ --
			代码演示:
				public class Demo {
					public static void main(String[] args) {
						// ++  变量才可以使用 常量是不可以使用的
						// 一个变量经过++运算符运算之后  自身的值+1
						// --  一个变量经过了--运算符的运算之后  自身的值 -1

						// ++ 和--  是一元运算符 

						int a = 10;
						a++;
						System.out.println(a); //11

						//100++;
						// int 100 = 101;
						//System.out.println(100);

						int b = 10;
						b--;
						System.out.println(b);


						System.out.println("-----------------");

						// ++ 运算符 不仅可以写变量的后面, 还可以写在变量的前面。
						int c = 10;
						++c;
						System.out.println(c); //11

						// 总结上述内容: 一个数经过++ ,无论++放数的前面还是后面, 这个数 自身都会增加1

					}
				}

				public class Demo1 {
					public static void main(String[] args) {
						// 表达式的概念
						// 用运算符链接起来的式子 就是表达式
						// 表达式会有如下的特点
							//一个表达式 会有一个结果。
							// 一般一个表达式 都不是完整的逻辑  不能独立成语句
							// 表达式 不能被重新赋值。
						
						int a = 10;
						int b = 20;
						int c = a+b; // a+b 这就是一个表达式

						int d = a*b + b/a; //
						System.out.println(c);
						System.out.println(d);

						//a+b;
						//30;
						//a*b + b/a;
						//202
						
						//a+b = 40; //30

						// 既然 你说了 用运算符链接起来的式子 是表达式。
						// ++ 是运算符,  用++连接数据的 这种式子 是表达式

						System.out.println("-----------------");
						
						int e = 10;
						int f = e++;
						System.out.println(e); //11
						System.out.println(f); //10   ++放在后面 e++表达式的结果 取的是 e尚未+1的值。

						int g = 10;
						int h = ++g;
						System.out.println(g); //11
						System.out.println(h); //11   ++放在前面 ++e表达式的结果 取的是 e+1之后的值

					}
				}
			
			案例1:
				int a = 10;
				int b = 20;
				int c = 30;
				int d = 40;

				int e = a++ + ++b + --c +  d--;
					//  10	   21    29     40
				System.out.println(e); //100

			案例2:
				int a = 10;
				int b = 20;
				int c = 30;
					 // a=11  b=19  c=31  a=12  b=20  c=30
				int d = a++ + --b + ++c + ++a + b++ + c--;
					 // 10    19     31    12    19    31
				System.out.println(a); //12
				System.out.println(b); //20
				System.out.println(c); //30
				System.out.println(d); //122

	赋值运算符
		普通赋值运算符 = 
			int a = 10;

		复合赋值运算符
			+= -= *= /= %= 
			
			int  a = 10;
			int b = 20;
			a +=b; // a = a+b;
			System.out.println(a); //30

			注意事项:
				short s = 10;
				byte b = 20;
				//s = s + b;  // 编译报错  比int小的 计算的时候 会全部提升为int类型。
				//s = (short)s +b;  // 编译报错
				s = (short)(s +b);
				System.out.println(s); //30

				//--------------------
				short s1 = 10;
				byte b1 = 20;
				s1+=b1;  // s1 = (short)(s1 +b1);
				System.out.println(s1);

	比较运算符 :
		> <  >= <= == != 
			
		int a = 10;
		int b = 5;
		//a>b;
		//true;
		boolean c = a>b; // 比较运算符的 结果 全部都是 boolean类型
		System.out.println(c);

		// 定义变量a   判断这个a是属于 0-100的范围吗?  true false
		int a = 180;

		//boolean b = 0<a <100; //编译报错
		boolean b = 0<a & a<100;
		System.out.println(b);

	逻辑运算符
		a 在 0 - 100的范围吗?
			System.out.println( 0<a & a<100 );

		& : 并且的意思
			一箱酒(两瓶),里面有一瓶真酒 有一瓶假酒  ,请问你认为 这一箱酒是真的还是假的, 你肯定认为是假的 不买。
			
			并且, 有假则假。  有false则false
		
		| : 或者的意思
			我两只手 每一只收里面有一个苹果, 一个是好苹果 另一个是烂苹果, 请问你选哪一个。  肯定选好的。
			
			或者, 有真则真,  有true 则true
		
		^ : 异或  异 :不同   , 或:通假字 惑  疑惑。    意思:疑惑是否不同吗

			如果是 不同,  true,  不是 false

			true ^ true  ----false 
			false ^ true  ---true
			
			
			System.out.println(true != true); //false
			System.out.println('a'!='b'); //true
			System.out.println(10!=20); //true

			//System.out.println("a"  ^ "b"); //编译报错
			System.out.println("a" != "b"); //true
			
		! : 取反。
			

		路逻辑运算符:
			&& 和& 的结果是一样的。
				&& 效率高。   
					并且, 有false则false。 如果左侧看到false了  右侧就不执行了。
				
			|| 和| 的结果是一样的。
				|| 效率高。   
					或者, 有true则true。 如果左侧看到true了  右侧就不执行了

			int a = 10;
			int b = 20;

			//a>100 && b++;  //编译报错。
			//true;
			//false;

			//boolean c = a>100 && b++; //编译报错   逻辑运算符 只能算boolean类型 左右两侧 必须只能是boolean 否则编译报错
			
			boolean c = a>100 && b++ > 0; 

			System.out.println(b); //20
			
	三元运算符:
		三 :三个  元:元素

		一元运算符:
			System.out.println(+10);
			System.out.println(-10);
			int a = 10;
			a++;
			a--;
		
		二元运算符:
			System.out.println(10+10);
			System.out.println(10>5);
		
		三元运算符:
			格式:
				关系表达式 ? 表达式1 : 表达式2;

				int a = 10;
				int b = 20;
				//a >b ? a+b : a-b;  //编译报错 不是语句
				int c = a >b ? a+b : a-b;
				System.out.println(c);
			
			案例: 键盘录入三个整数,最终打印这三个值中最大的那个数。
				import java.util.Scanner;
				public class Demo {
					public static void main(String[] args){
						Scanner sc = new Scanner(System.in);
						int a = sc.nextInt();
						int b = sc.nextInt();
						int c = sc.nextInt();
						
						int temp = a>b ? a :b;
						int max = temp > c ? temp : c;
						System.out.println(max);

						int max1 = a > b ? ( a>c ?a:c ) : (b>c ? b :c);
						System.out.println(max1);
					}
				}

结构语句(☆☆☆☆☆)
	顺序结构语句:
		class Demo {
			public static void main(String[] args){
				// 从上往下从左往右
				System.out.println("helloworld1");
				System.out.println("helloworld2");
				System.out.println("helloworld3");
				System.out.println("helloworld4");
				System.out.println("helloworld5");
			}
		}
	选择(分支)结构语句
		class Demo {
			public static void main(String[] args){
				// 依然是从上往下执行 只不过 有的语句 可以选择性的执行。
				System.out.println("helloworld1");

					System.out.println("helloworld2"); // 打印2 这一句话  我选择性的执行。

				System.out.println("helloworld3");
				System.out.println("helloworld4");
				System.out.println("helloworld5");
			}
		}

		if 来控制选择执行
			if 第一种格式
				if (条件表达式){
					语句体;
				}

				
				案例:成绩合格查询系统。  你键盘输入你的成绩,我程序就给你显示是否及格。
					import java.util.Scanner;
					public class Demo4 {
						public static void main(String[] args){
							Scanner sc = new Scanner(System.in);	
							System.out.println("请您输入您的成绩 我来判定您是否及格");
							int score = sc.nextInt();
							if (score >=60){
								System.out.println("及格");
							}
							
							//System.out.println("不及格");

							System.out.println("结束");
						}
					}
			
			if 的第二种格式
				if (条件表达式){
					语句体1;
				}else{
					语句体2;
				}
				

				案例:
					import java.util.Scanner;
					public class Demo4 {
						public static void main(String[] args){
							Scanner sc = new Scanner(System.in);	
							System.out.println("请您输入您的成绩 我来判定您是否及格");
							int score = sc.nextInt();
							/*
							if (score >=60){
								System.out.println("及格");
							}
							
							//System.out.println("不及格");
							*/
							if (score >=60){
								System.out.println("及格");
							}else{
								System.out.println("不及格");
							}

							System.out.println("结束");
						}
					}

			if 的第三种格式:
				if (条件表达式1){
					语句体1;
				}else if (条件表达式2){
					语句体2;
				}else if (条件表达式3){
					语句体3;
				}else if (条件表达式4){
					语句体4;
				}else if (条件表达式5){
					语句体5;
				}else{
					语句体6;
				}

				举例1:
					import java.util.Scanner;
					public class Demo {
						public static void main(String[] args){
							Scanner sc = new Scanner(System.in);
							int score = sc.nextInt();
							if (score >=90 && score <=100){
								System.out.println("优秀");
							}else if (score >=80 && score <=90){
								System.out.println("良好");
							}else if (score >=70 && score <=80){
								System.out.println("差不多儿");
							}else if (score >=60 && score <=70){
								System.out.println("及格");
							}else if (score >=50 && score <=60){
								System.out.println("不太好");
							}else{
								System.out.println("太不好了");
							}

							System.out.println("结束");
						}
					}
				
				举例2:
					public class Test {
						/*
							需求:键盘录入学生考试成绩, 根据成绩程序给出不同的奖励。
							
								95~100分 : 自行车一辆
								90~94分  : 游乐场一次
								80~89分	 : 变形金刚一个
								80分以下 : 挨顿揍, 这座城市又多了一个伤心的人~

							步骤:
									1. 使用Scanner录入考试成绩
									2. 判断成绩是否在合法范围内 0~100
										非法的话, 给出错误提示
									3. 在合法的语句块中判断成绩范围符合哪一个奖励
										并给出对应的奖励.
							
						*/
						public static void main(String[] args){
							// 1. 使用Scanner录入考试成绩
							Scanner sc = new Scanner(System.in);
							System.out.println("请输入您的成绩:");
							int score = sc.nextInt();
							// 2. 判断成绩是否在合法范围内 0~100
							if(score >=0 && score <= 100){
								// 合法成绩
								// 3. 在合法的语句块中判断成绩范围符合哪一个奖励
								if(score >= 95 && score <= 100){
									System.out.println("自行车一辆");
								}else if(score >= 90 && score <= 94){
									System.out.println("游乐场一次");
								}else if(score >= 80 && score <= 89){
									System.out.println("变形金刚一个");
								}else {
									System.out.println("挨顿揍, 这座城市又多了一个伤心的人~");
								}
							}else{
								// 非法的话, 给出错误提示
								System.out.println("您的成绩输入有误!");
							}
						}
					}
			
		switch 来控制选择执行


	循环结构语句
		class Demo {
			public static void main(String[] args){
				// 依然是从上往下执行 只不过 执行完一遍 接着返回最前面 继续重新执行。
				System.out.println("helloworld1");
				System.out.println("helloworld2"); 
				System.out.println("helloworld3");
				System.out.println("helloworld4");
				System.out.println("helloworld5");
			}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拥你入怀、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值