JavaSE学习day03

day03 学习笔记

知识点1:运算符

1. 逻辑运算符

JavaSE学习day03_第1张图片

  • 说明
& &&  |  ||  ! ^

说明:
1. 逻辑运算符操作的都是boolean类型的变量
2. 逻辑运算符的运算结果也是boolean类型
  • 代码演示
class LogicTest {
     
	public static void main(String[] args) {
     
		
		//& 和 &&相同点:当符号左边是true时,都执行符号右边的操作
		//不同点:
		//& : 当符号左边是false时,继续执行符号右边的操作
		//&& : 当符号左边是false时,不再执行符号右边的操作
		//& 与 && 表达的都是且的关系。但是,在开发中我们使用&&的频率高一些。
		boolean b1 = true;
		b1 = false;
		int n1 = 10;
		if(b1 & (n1++) > 0){
     
			System.out.println("今天天气稍微闷热一些~");
		}else{
     
			System.out.println("明天预计天气稍微闷热一些~");
		}

		System.out.println("n1 = " + n1);

		//#################################
		boolean b2 = true;
		b2 = false;
		int n2 = 10;
		if(b2 && (n2++) > 0){
     
			System.out.println("今天天气稍微闷热一些~");
		}else{
     
			System.out.println("明天预计天气稍微闷热一些~");
		}

		System.out.println("n2 = " + n2);
		

		//###############################
		//| 和 || 相同点:当符号左边是false时,都执行符号右边的操作
		//不同点:
		//| : 当符号左边是true时,继续执行符号右边的操作
		//|| : 当符号左边是true时,不再执行符号右边的操作
		//| 与 || 表达的都是或的关系。但是,在开发中我们使用||的频率高一些。
		boolean b3 = false;
		b3 = true;
		int n3 = 10;
		if(b3 | (n3++) > 0){
     
			System.out.println("今天天气稍微闷热一些~");
		}else{
     
			System.out.println("明天预计天气稍微闷热一些~");
		}

		System.out.println("n3 = " + n3);
		
		//###################

		boolean b4 = false;
		b4 = true;
		int n4 = 10;
		if(b4 || (n4++) > 0){
     
			System.out.println("今天天气稍微闷热一些~");
		}else{
     
			System.out.println("明天预计天气稍微闷热一些~");
		}

		System.out.println("n4 = " + n4);

	}
}

2. 位运算符

  • 说明
<<   >>   >>>  &  |  ^  ~

总结:
<< : 在一定范围内,每左移一位,数值*2

>> : 在一定范围内,每右移一位,数值 / 2

"过犹不及"

>>> : 不管是正数还是负数,右移之后,高位都补0

总结:我们在开发中使用位运算的机会不多。
具体说到如果使用的话,主要是为了提升运算的效率。


经典的面试题:
最高效的方式计算 2 * 8  

2 << 3
8 << 1
  • 举例

JavaSE学习day03_第2张图片
JavaSE学习day03_第3张图片
JavaSE学习day03_第4张图片

  • 代码演示
class BitTest {
     
	public static void main(String[] args) {
     
		System.out.println("13 << 2 : " + (13 << 2));
		System.out.println("-13 << 2 : " + (-13 << 2));
		System.out.println("13 << 27 : " + (13 << 27));
		System.out.println("13 << 28 : " + (13 << 28));

		System.out.println("13 >> 2 : " + (13 >> 2));
		System.out.println("-13 >> 2 : " + (-13 >> 2));
		System.out.println("-13 >>> 2 : " + (-13 >>> 2));


		//练习:如何交换两个int型变量的值
		int m = 10;
		int n = 20;

		System.out.println("m = " + m + ", n = " + n);
		
		//交换两个变量的值(重点)
		//方式一:推荐!
		//int temp = m;
		//m = n;
		//n = temp;

		//方式二:使用有局限性:① 可能会超出int的范围  ② 数据类型的局限性
		//m = m + n;//10 + 20
		//n = m - n;//30 - 20
		//m = m - n;//30 - 10

		//方式三:使用有局限性:数据类型的局限性
		m = m ^ n;
		n = m ^ n;
		m = m ^ n;


		System.out.println("m = " + m + ", n = " + n);
	}
}

3. 三元运算符

  • 说明
格式: (条件表达式)? 表达式1 : 表达式2

说明1: ① 条件表达式的结果为boolean
       ② 如果条件表达式的结果为true,则返回表达式1。反之,如果条件表达式的结果为false,则返回表达式2
       ③ 表达式1和表达式2满足一致性。

说明2:三元运算符可以嵌套使用

说明3:凡是可以使用三元运算符的地方,都可以改写成if-else结构。反之,不成立。
       凡是既可以使用三元运算符,又可以使用if-else结构的地方,建议使用三元运算符。因为执行效率高一些。
  • 代码演示
class SanYuanTest {
     
	public static void main(String[] args) {
     
		
		//获取两个数的较大值
		int m = 10;
		byte n = 15;

		int max = (m > n)? m : n;
		System.out.println("较大值为:" + max);

		//String s = 12;//编译不通过

		String maxString = (m > n)? "m大" : "n大";
		n = 10;
		String maxString1 = (m > n)? "m大" : ((m == n)? "m和n相等" : "n大");
		
		System.out.println(maxString);
		System.out.println(maxString1);

		//练习:获取三个数的最大值
		int a = 10;
		int b = 43;
		int c = 5;

		int max1 = (a > b)? a : b;
		int max2 = (max1 > c)? max1 : c;//不建议: int max2 = (((a > b)? a : b) > c)? ((a > b)? a : b) : c;
		System.out.println(max2);
	}
}

4. 运算符的优先级

JavaSE学习day03_第5张图片

说明:了解即可。不需要记忆!

知识点2:流程控制

1. 流程控制介绍![

JavaSE学习day03_第6张图片

2. if-else结构

  • 结构
结构一:
if(条件表达式){
	执行代码块;
}


结构二:二选一
if(条件表达式){
	执行代码块1;
}
else{
	执行代码块2;
}

结构三:多选一

if(条件表达式1){
	执行代码块1;
}
else if (条件表达式2){
	执行代码块2;
}
   ……
else{
	执行代码块n;
}
  • 说明
1. if-else结构中的else是可选的。
2. 如果两个条件表达式是“互斥”关系,则哪个写在上面,哪个写在下面都可以。
   如果两个条件表达式是有交集的关系,谁上谁下是有区别的。根据题目要求看哪个应该是声明在上面。
   如果两个条件表达式是“包含”关系,通常将范围小的声明在范围大的上面。

3. 如果执行语句结构中只有一行执行语句,则执行语句所在的一对{}可以省略。
   但是,不建议大家省略!
  • 代码演示
//针对结构一:
		int heartBeats = 80;
		//另外:if(heartBeats >= 60 && heartBeats <= 100) 不能写成:if(60<=heartBeats<=100)
		if(heartBeats < 60 || heartBeats > 100){
       
			System.out.println("需要做进一步的检查");

		}

		System.out.println("体检结束");
		
		//针对结构二:
		int age = 20;
		if(age < 18){
     
			System.out.println("还未成年,可以多看看动画片");
		}else{
     
			System.out.println("可以看看动作片、战争片、...");
		}

		//针对结构三:
		age = 150;
		if(age < 0){
     
			System.out.println("数据输入有误");
		}else if(age < 6){
     
			System.out.println("婴幼儿时期");
		}else if(age < 13){
     
			System.out.println("少年时期");
		}else if(age < 35){
     
			System.out.println("青壮年时期");
		}else if(age < 55){
     
			System.out.println("中年时期");
		}else if(age < 140){
     
			System.out.println("老年时期");
		}else{
     
			System.out.println("恭喜你,成仙儿了~");
		}
  • 代码演示
class IfTest1 {
     
	public static void main(String[] args) {
     
		//1. 从键盘获取岳小鹏的期末成绩
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入岳小鹏的期末成绩(0-100):");
		int score = scanner.nextInt();

		//2. 根据成绩做if-else判断
		if(score == 100){
     
			System.out.println("奖励一辆BMW");
			System.out.println("奖励一辆BMW");
		}else if(score > 80 && score <= 99){
     
			System.out.println("奖励一台iphone xs max");
		}else if(score >= 60 && score <= 80){
     
			System.out.println("奖励一个 iPad");
		}else{
     
			System.out.println("什么奖励也没有");
		}

	}
}
  • 代码演示
/*
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”

*/
import java.util.Scanner;
class IfTest3 {
     
	public static void main(String[] args) {
     
		Scanner scan = new Scanner(System.in);

		System.out.println("请输入你的身高(cm):");
		int height = scan.nextInt();

		System.out.println("请输入你的财富值(单位:万):");
		double wealth = scan.nextDouble();
		
		/*
		方式一:

		System.out.println("请告诉我你是否帅?(true/false):");
		boolean isHandsome = scan.nextBoolean();

		if(height > 180 && wealth > 1000 && isHandsome){
			System.out.println("我一定要嫁给他!!!");
			
		}else if(height > 180 || wealth > 1000 || isHandsome){
			System.out.println("嫁吧,比上不足,比下有余。");
		}else{
			System.out.println("不嫁!");
		}

		*/
		System.out.println("请告诉我你是否帅?(是/否):");
		String isHandsome = scan.next();

		if(height > 180 && wealth > 1000 && "是".equals(isHandsome)){
     
			System.out.println("我一定要嫁给他!!!");
			
		}else if(height > 180 || wealth > 1000 || "是".equals(isHandsome)){
     
			System.out.println("嫁吧,比上不足,比下有余。");
		}else{
     
			System.out.println("不嫁!");
		}
	}
}

3. Scanner的使用

//1.
import java.util.Scanner;
/*
需求:如何从控制台获取常见数据类型的变量

实现:使用Scanner类及其方法即可。

步骤:
1. 导包: import java.util.Scanner;
2. 在main方法中创建Scanner的实例: Scanner scan = new Scanner(System.in);
3. 调用Scanner的相关方法,获取不同类型的变量: next() \ nextInt() \ nextBoolean() \ ....


说明:
如果要求输入的类型与用户实际输入的类型不匹配的话,报异常:InputMismatchException
*/

class ScannerTest {
     
	public static void main(String[] args) {
     
		//2.
		Scanner scan = new Scanner(System.in);
		//3.
		//3.1 获取String类型的变量
		System.out.println("请输入你的姓名:");
		String name = scan.next();
		System.out.println("名字为:" + name);

		//3.2 获取整型int型的变量
		//获取其他整型:nextByte() / nextShort() / nextLong()
		System.out.println("请输入你的年龄:");
		int age = scan.nextInt();
		System.out.println("年龄为:" + age);

		//3.3 获取浮点型double型的变量
		//获取其他浮点型:nextFloat()
		System.out.println("请输入你的体重:");
		double weight = scan.nextDouble();
		System.out.println("体重为:" + weight);

		//3.4 获取boolean类型的变量
		System.out.println("请输入你是否已婚(true/false):");
		boolean isMarried = scan.nextBoolean();
		System.out.println("是否已婚:" + isMarried);

		//3.5 获取char类型的变量
		System.out.println("请输入你的性别(男/女):");
		String gender = scan.next();//"男"
		char charGender = gender.charAt(0);//charAt(index):获取index位置的字符
		System.out.println("性别为:" + charGender);

	}
}

4. 获取随机数

class RandomTest {
     
	public static void main(String[] args) {
     
		//random():返回一个>= 0.0 且 < 1.0的double型值
		double value = Math.random();
		System.out.println(value);

		//获取[0,100]范围内的随机数:
		
		int score = (int)(Math.random() * 101);  //[0,1) -> [0,101) -> [0,100]
		System.out.println(score);

		//获取[10,30]范围内的随机数:
		int value1 = (int)(Math.random() * 21  + 10);   // [0,1) -> [0,21) -> [10,31)  ->[10,30]

		//获取[a,b]范围内的随机数:(int)(Math.random() * (b - a + 1) + a)
	}
}

5. switch-case结构

  • 结构
switch(表达式){
case 常量1:
	语句1;
	// break;
case 常量2:
	语句2;
	// break;
… …
case 常量N:
	语句N;
	// break;
default:
	语句;
	// break;
} 

  • 说明
① switch中的表达式,可以是如下的一些数据类型:byte \ short \ char \ int \ 枚举类型(JDK5.0) \ String (JDK7.0)
② 根据switch中的表达式的值,依次匹配case中的常量。一旦匹配成功,则进入相应的case的执行语句中执行。并考虑执行后续
的case结构。直到遇到break或switch-case结构执行结束为止。
或

③ switch-case要想实现多选一的效果,需要使用break。
③ default 相当于if-else中的else结构。是可选的,位置也是灵活的

④ switch-case 实现的结构都可以转换为if-else。反之,不成立。
凡是既可以使用switch-case,又可以使用if-else结构的地方,建议使用switch-case。因为执行效率高一些。
  • 代码演示
class SwitchTest {
     
	public static void main(String[] args) {
     
		int num = 2;
		switch(num){
     
		
		case 0:
			System.out.println("Zero");
			break;
		case 1:
			System.out.println("One");
			break;
		case 2:
			System.out.println("Two");
			break;//跳出当前的switch-case结构
		case 3:
			System.out.println("Three");
			break;
		case 4:
			System.out.println("Four");
			break;
		default:
			System.out.println("Other");
			//break;
		}
		
		//##########################
		String season = "summer1";
		switch (season) {
     
		
		case "spring":
			System.out.println("春暖花开");
			break;
		case "summer":
			System.out.println("夏日炎炎");
			break;
		case "autumn":
			System.out.println("秋高气爽");
			break;
		case "winter":
			System.out.println("冬雪皑皑");
			break;
		default:
			System.out.println("季节输入有误");
			break;
		}

		
	}
}

day03 编程题

  1. 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
import java.util.Scanner;
class homework_24{
     
	public static void main(String[] args){
     
		Scanner scan = new Scanner(System.in);

		System.out.println("请输入三个整数:");
		int num1 = scan.nextInt();
		int num2 = scan.nextInt();
		int num3 = scan.nextInt();

		int max = (num1>num2)?num1:num2;
		int min = (num1<num2)?num1:num2;

		if(num3>max){
     
			System.out.println(num3 + "、" + max + "、" + min);
		}else if(num3 > min){
     
			System.out.println(min + "、" + num3 +"、" + max);
		}else{
     
			System.out.println(num3 + "、" + min +"、" + max);
		}
	}
}
  1. 语法点:变量,运算符,if…else.
    案例:从键盘输入一个字符,判断它是字母还是数字,还是其他字符
public class Test02 {
     
    public static void main(String[] args) {
     
        java.util.Scanner input = new Scanner(System.in);
        System.out.println("请输入一个字符:");

        char c = input.next().charAt(0);
        if(c >= '0' && c <= '9'){
     
            System.out.println(c + "是数字");
        }else if(c >= 'A'&& c<='Z' || c >= 'a' && c <= 'z'){
     
            System.out.println(c + "是数字");
        }else{
     
            System.out.println(c + "是非数字非字母的其他字符.");
        }
    }
}
  1. 语法点:变量,运算符,if…else
  • 编写步骤:
    1. 定义类 Test3
    1. 定义 main方法
    1. 定义变量折扣 discount,初始化为1, 总价totalPrice的值从键盘输入
    1. 判断当 totalPrice >=500 ,discount赋值为0.5
    1. 判断当 totalPrice >=400 且 <500 时,discount赋值为0.6
    1. 判断当 totalPrice >=300 且 <400 时,discount赋值为0.7
    1. 判断当 totalPrice >=200 且 <300 时,discount赋值为0.8
    1. 判断当 totalPrice >=0 且 <200 时,discount赋值为1
    1. 判断当 totalPrice<0 时,显示输入有误
    1. 输出结果
public class Test03 {
     
    public static void main(String[] args) {
     
        double discount = 1;
        java.util.Scanner input = new Scanner(System.in);

        System.out.println("请输入总价值");
        double totalPrice = input.nextInt();

        if(totalPrice >= 0){
     
            discount = 0.5;
        }else if(totalPrice >=400){
     
            discount = 0.6;
        }else if(totalPrice >= 300){
     
            discount = 0.7;
        }else if(totalPrice >= 200){
     
            discount = 0.8;
        }else if(totalPrice > 0){
     
            discount = 1;
        }else{
     
            System.out.println("输入有误");
        }

        System.out.println("总价:" + totalPrice);
        System.out.println("折扣:" + discount);
        System.out.println("折扣后总价:" + totalPrice*discount);
    }
}

4.语法点:变量,运算符,if…else
案例:从键盘输入生日,判断星座

public class Test04 {
     
    public static void main(String[] args) {
     
        java.util.Scanner input = new Scanner(System.in);
        System.out.println("请输入月份");
        int month = input.nextInt();
        System.out.println("请输入日期");
        int day = input.nextInt();

        if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) {
     
            System.out.println("生日" + month + "月" + day + "日是水瓶座");
        } else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) {
     
            System.out.println("生日" + month + "月" + day + "日是双鱼座");
        } else if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) {
     
            System.out.println("生日" + month + "月" + day + "日是白羊座");
        } else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) {
     
            System.out.println("生日" + month + "月" + day + "日是金牛座");
        } else if ((month == 5 && day >= 21) || (month == 6 && day <= 21)) {
     
            System.out.println("生日" + month + "月" + day + "日是双子座");
        } else if ((month == 6 && day >= 22) || (month == 7 && day <= 22)) {
     
            System.out.println("生日" + month + "月" + day + "日是巨蟹座");
        } else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) {
     
            System.out.println("生日" + month + "月" + day + "日是狮子座");
        } else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) {
     
            System.out.println("生日" + month + "月" + day + "日是处女座");
        } else if ((month == 9 && day >= 23) || (month == 10 && day <= 23)) {
     
            System.out.println("生日" + month + "月" + day + "日是天平座");
        } else if ((month == 10 && day >= 24) || (month == 11 && day <= 22)) {
     
            System.out.println("生日" + month + "月" + day + "日是天蝎座");
        } else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) {
     
            System.out.println("生日" + month + "月" + day + "日是射手座");
        } else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) {
     
            System.out.println("生日" + month + "月" + day + "日是摩羯座");
        }
    }
}
  1. JavaSE学习day03_第7张图片
public class Test06 {
     
    public static void main(String[] args) {
     
        java.util.Scanner input = new Scanner(System.in);
        System.out.print("请输入方程的参数a:");
        double a = input.nextDouble();
        System.out.print("请输入方程的参数b:");
        double b = input.nextDouble();
        System.out.print("请输入方程的参数c:");
        double c = input.nextDouble();

        if (a != 0) {
     
            double d = b*b -4*a*c;
            if(d > 0){
     
                double x1 = (-b + Math.sqrt(d))/(2*a);
                double x2 = (-b + Math.sqrt(d))/(2*a);
            }else if (d == 0){
     
                double x = -b/(2*a);
            }else{
     
                System.out.println("在实数范围内无解");
            }
        }else if (a == 0 && b != 0){
     
            double x = -c/b;
            System.out.println("x");
        }else{
     
            System.out.println("不是方程");
        }
    }
}
  1. 案例:已知2019年1月1日是星期二,从键盘输入2019年的任意一天,请判断它是星期几
  • 开发提示:
    1. 先统计这一天是这一年的第几天days
    2. 然后声明一个变量week,初始化为1
    3. 然后week加上days+1
    4. 然后求week与7的模数
    5. 然后输出结果,考虑星期天的特殊判断
/**
 * @author zhouyanjun
 * @create 2020-06-27 9:46
 */
public class Test07 {
     
    public static void main(String[] args) {
     
        java.util.Scanner input = new Scanner(System.in);

        System.out.println("月:");
        int month = input.nextInt();
        System.out.println("日:");
        int day = input.nextInt();

        int days = day;    //days 里面存的是这一天是这一年的第几天
        switch(month){
     
            case 12://累加的1-11月
                days += 30;
            case 11://1-10
                days += 31;
            case 10://1-9
                days +=30;
            case 9://1-8
                days +=31;
            case 8://1-7
                days +=31;
            case 7://1-6
                days += 30;
            case 6://1-5
                days +=31;
            case 5://1-4
                days +=30;
            case 4://1-3
                days +=31;
            case 3://1-2
                days +=28;
            case 2://加上1月的天数
                days +=31;
        }

        int week = 1;//2018年12月31日是星期一
        week += days;
        week %= 7;//7保证了days和7有规律性的关系
        System.out.println(month + "月" + days + "日是这一年的第" + days + "天,是星期"+ ((week == 0)? "天":week));

你可能感兴趣的:(Java学习,javase)