30天搞定Java--day4

每日一考和复习

每日一考

  1. “&”和“&&”的异同
// 相同点
&&& 都是在两个布尔表达式同时为true时返回true,其余情况返回false
// 不同点
& 无论表达式1是否为true,都会判断表达式2
&& 只有在表达式1true的情况下会判断表达式2
  1. 输出以下程序运行的结果
class OperatorTest {
	public static void main(String[] args) {
		boolean x = true;
		boolean y = false;
		short z = 40;
		if ((z++ == 40) && (y = true)) {
			z++;
		}
		if ((x = false) || (++z == 43)) {
			z++;
		}
		System.out.println("z = " + z);
	}
}
// 解答
第一个if先判断表达式1(z == 40)后z++,表达式2给y赋值为true,判断结果为true,z++
此时z为42
第二个if表达式1给x赋值false,继续判断表达式2,先++z后判断为43,z++
最终输出为->z = 44
  1. 定义三个int型变量并赋值,使用三元运算符或者if-else获取这三个数中的较大数的实现
class GetMaxNum{
	public static void main(String[] args){
		// if-else
		int number1 = 1, number2 = 2, number3 = 3;
		int maxNumber = number1;
		if(number1 < number2){
			maxNumber = number2;
			if(number2 < number3){
				maxNumber = number3;
			}
		}else if(number1 < number3){
			maxNumber = number3;
		}
		System.out.println(maxNumber);
		// 三元运算符
		maxNumber = (number1 > number2)?number1:number2;
		maxNumber = (maxNumber > number3)?maxNumber:number3;
		System.out.println(maxNumber);
	}
}
  1. 编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。否则,打印两数的乘积
class AndOrProduct{
	public static void main(String[] args){
		double number1 = 3.8,number2 = 10.5;
		if(number1 > 10 && number2 < 20){
			System.out.println(number1 + number2);
		}else{
			System.out.println(number1 * number2);
		}
	}
}
  1. 交换两个变量值的代码的实现
class ChangeTwoNumber{
	public static void main(String[] args){
		// 临时变量
		double number1 = 3.8,number2 = 10.5;
		double temp = number1;
		number1 = number2;
		number2 = temp;
		System.out.println(number1 + " " +number2);
		// 加和(浮点数有误差且有可能越界,还是临时变量靠谱)
		number1 = number1 + number2;
		number2 = number1 - number2;
		number1 = number1 - number2;
		System.out.println(number1 + " " +number2);
		// 异或
		int number3 = 3,number4 = 4;
		number3 = number3 ^ number4;
		number4 = number3 ^ number4;
		number3 = number3 ^ number4;
		System.out.println(number3 + " " +number4);
	}
}

复习
day3的学习内容

程序流程控制(接day3)

switch-case结构

switch(表达式){
case 常量1:
	执行语句1;
	break;
case 常量2:
	执行语句2;
	break;
...
default:
	执行语句n;
	break;
}

在这里插入图片描述
switch语句有关规则

  • switch(表达式)中表达式的值必须是下述几种类型之一:byteshortcharint枚举 (jdk 5.0),String (jdk 7.0)
  • case子句中的值必须是常量,不能是变量名或不确定的表达式值
  • 同一个switch语句,所有case子句中的常量值互不相同
  • break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
  • default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default

练习题目

// 对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”
switch(score / 60){
	case 0:
		System.out.println("不及格");
		break;
	case 1:
		System.out.println("及格");
		break;
	}
// 编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。
// 利用无break穿透
import java.util.Scanner;

class DaysOfYear{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);

		int sumDays = 0;
		int month = scanner.nextInt();
		int day = scanner.nextInt();
		switch(month){
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			sumDays += 28;
		case 2:
			sumDays += 31;
		case 1:
			sumDays += day;
		}
		System.out.println(sumDays);
	}
}

switch和if语句的对比

  • 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高
  • 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立

扩展-如何从键盘获取不同类型的变量

如何从键盘获取不同类型的变量:需要使用Scanner类

具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量

注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMismatchException
导致程序终止。

循环结构

  • 根据循环条件,重复性的执行某段代码
  • 有while、do…while、for三种循环语句
  • 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素

循环语句分类

  1. for 循环
  2. while 循环
  3. do-while 循环

循环语句的四个组成部分

  1. 初始化部分(init_statement)
  2. 循环条件部分(test_exp)
  3. 循环体部分(body_statement)
  4. 迭代部分(alter_statement)

在这里插入图片描述

for循环

语法格式

for (初始化部分; 循环条件部分; 迭代部分){
	循环体部分;

例题

扫描二维码关注公众号,回复: 10301047 查看本文章
/* 
编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,
在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”
*/
class Problem{
	public static void main(String[] args) {
		for(int i = 1;i <= 150;i++){
			System.out.print(i + "  ");
			if(i % 3 == 0){
				System.out.print("foo ");
			}
			if(i % 5 == 0){
				System.out.print("biz ");
			}
			if(i % 7 == 0){
				System.out.print("baz ");
			}
			//换行
			System.out.println();
		}
	}
}

总结

今天主要学习了流程控制的分支结构中的switch-case、循环结构的for循环,感觉讲的比较慢

发布了16 篇原创文章 · 获赞 27 · 访问量 2715

猜你喜欢

转载自blog.csdn.net/weixin_42224119/article/details/105049206
今日推荐