每日一考和复习
每日一考
- “&”和“&&”的异同
// 相同点
& 和 && 都是在两个布尔表达式同时为true时返回true,其余情况返回false
// 不同点
& 无论表达式1是否为true,都会判断表达式2
&& 只有在表达式1为true的情况下会判断表达式2
- 输出以下程序运行的结果
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
- 定义三个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);
}
}
- 编写程序,声明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);
}
}
}
- 交换两个变量值的代码的实现
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(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (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循环,方便的遍历集合、数组元素
循环语句分类
- for 循环
- while 循环
- do-while 循环
循环语句的四个组成部分
- 初始化部分(init_statement)
- 循环条件部分(test_exp)
- 循环体部分(body_statement)
- 迭代部分(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循环,感觉讲的比较慢