理论试题
一、选择题
-
下面哪个if语句的写法是正确的? A.if x > 10 { } B.if (x > 10) then { } C.if (x > 10) { } D.if {x > 10} 答案:C
解析:Java的if语句条件必须用圆括号括起来,A选项错误。B选项多了一个then,D选项的花括号位置不对。 -
以下代码的输出结果是?
int score = 85; if (score >= 90) { System.out.print("优秀"); } else if (score >= 80) { System.out.print("良好"); } else { System.out.print("加油"); }A.优秀
B.良好
C.加油
D.没有输出
答案:B
解析:85分不满足第一个条件(>=90),但满足第二个条件(>=80),所以输出"良好"。else if就像梯子一样,从上往下逐个检查,遇到第一个满足的条件就执行对应的代码块。 -
关于switch语句,下列说法错误的是: A.case后面的值可以是字符串
B.每个case后面都要加break
C.default分支可以省略
D.JDK7以后支持字符串类型
答案:B
解析:break不是必须的,不加break会继续执行下一个case的代码,这叫"case穿透"。虽然有时候故意利用这个特性,但大多数情况下还是应该加break。其他选项都是正确的,特别是JDK7确实开始支持字符串switch了。 -
下面代码的输出是?
int x = 2; switch (x) { case 1: System.out.print("一"); case 2: System.out.print("二"); case 3: System.out.print("三"); default: System.out.print("未知"); }A.二
B.二三
C.二三未知
D.一
答案:C
解析:因为没有break语句,程序会从匹配的case 2开始,一直执行到switch结束。这就是典型的case穿透现象,输出"二三未知"。 -
下面哪种情况最适合使用switch语句? A.判断一个数是否大于100
B.根据星期几执行不同操作
C.检查用户年龄是否在18-60之间
D.判断三个变量的大小关系
答案:B
解析:switch最适合处理固定值的多分支选择,比如星期、月份、菜单选项等离散值。A和C适合用if,D需要复杂的条件判断,用if更合适。
二、填空题
- 在if-else语句中,当if条件为______时,会执行else后面的代码块。
答案:false
解析:else就像是if条件的"备胎",只有当if条件不成立时才会执行。if条件必须是一个布尔表达式,结果是true或false。 - switch语句中,______关键字用于处理所有未被case匹配的情况。
答案:default
解析:default相当于if-else里的else,是可选的。当所有case都不匹配时,就执行default分支的代码。 - 下面代码的输出是______。
答案:Bint a = 10, b = 20; if (a > b) { System.out.print("A"); } else if (a < b) { System.out.print("B"); } else { System.out.print("C"); }
解析:10不大于20,所以跳过第一个if;10小于20,满足第二个条件,输出B。虽然简单,但考察了对if-else执行流程的理解。 - 要防止switch语句中的case穿透,应该在每个case分支末尾加上______语句。
答案:break
解析:break就像开关,执行到这里就会跳出整个switch块。不加break的话,程序会继续执行下一个case的代码,不管条件是否匹配。 - 在Java 7之前,switch语句不支持______类型的数据。
答案:String(字符串)
解析:早期switch只支持byte、short、char、int等基本类型,JDK7开始才支持字符串。枚举类型也支持,但浮点数到现在也不行。
三、代码分析题
分析下面这段成绩评级程序的输出结果,并解释每个判断条件的执行过程:
public class GradeEvaluator {
public static void main(String[] args) {
int score = 88;
char grade;
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'E';
}
switch (grade) {
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("中等");
break;
case 'D':
System.out.println("及格");
break;
default:
System.out.println("不及格");
}
}
}
答案及解析:
- 首先定义score为88分,进入if-else判断链:
- 第一个条件score >= 90不成立(88<90)
- 第二个条件score >= 80成立(88>80),所以grade被赋值为'B'
- 后面的条件不再检查,直接跳过
- 接着根据grade='B'进入switch语句:
- 匹配到case 'B',执行System.out.println("良好")
- 遇到break立即跳出switch
- 最终输出结果是:良好
执行过程重点:
- if-else if是从上往下顺序判断的
- 只要有一个条件满足,后面的条件就不再检查
- switch语句用grade的值直接跳转到对应case
- 每个case后面的break防止了穿透到下一个case
注意事项:
- 如果把if条件的顺序反过来写(比如先判断>=60),就会出错
- switch的case值必须是常量,不能是变量或范围
- 这个例子展示了if和switch的典型配合用法
实操试题
一、基础编程题
-
年龄分段判断
编写程序,根据输入的年龄输出所属年龄段:- 儿童(0-12岁)
- 青少年(13-17岁)
- 成人(18-59岁)
- 老年(60岁及以上)
要求使用if-else if-else结构实现。
参考解答:
# 源文件保存为“AgeGroup.java” import java.util.Scanner; public class AgeGroup { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入年龄:"); int age = sc.nextInt(); if(age >= 0 && age <= 12) { System.out.println("儿童"); } else if(age >= 13 && age <= 17) { System.out.println("青少年"); } else if(age >= 18 && age <= 59) { System.out.println("成人"); } else if(age >= 60) { System.out.println("老年"); } else { System.out.println("年龄不能为负数!"); } } }调试要点:
- 测试边界值:12、13、17、18、59、60这些关键点
- 输入负数时要给出错误提示
- 条件判断要用逻辑运算符连接
- 注意else的位置,它捕获所有未满足的条件
-
简易计算器
用switch结构实现加减乘除四则运算,用户输入两个数和运算符,程序输出计算结果。 参考解答:# 源文件保存为“SimpleCalculator.java” import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入第一个数:"); double num1 = sc.nextDouble(); System.out.print("请输入运算符(+ - * /):"); char operator = sc.next().charAt(0); System.out.print("请输入第二个数:"); double num2 = sc.nextDouble(); switch(operator) { case '+': System.out.println("结果:" + (num1 + num2)); break; case '-': System.out.println("结果:" + (num1 - num2)); break; case '*': System.out.println("结果:" + (num1 * num2)); break; case '/': if(num2 != 0) { System.out.println("结果:" + (num1 / num2)); } else { System.out.println("除数不能为零!"); } break; default: System.out.println("不支持的运算符"); } } }易错点:
- 除法要检查除数是否为零
- char类型输入用charAt(0)获取第一个字符
- 每个case后面要加break防止穿透
- default处理非法运算符输入
二、综合应用题
学生成绩转换
编写程序将百分制成绩转换为等级制:
- 90-100分:优秀
- 80-89分:良好
- 70-79分:中等
- 60-69分:及格
- 0-59分:不及格
要求:
- 用if-else和switch两种方式分别实现
- 检查输入是否在0-100范围内
- 对非法输入给出提示
参考解答:
# 源文件保存为“GradeConverter.java”
import java.util.Scanner;
public class GradeConverter {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入成绩(0-100):");
int score = sc.nextInt();
// if-else实现
if(score < 0 || score > 100) {
System.out.println("成绩必须在0-100之间!");
} else {
String grade;
if(score >= 90) {
grade = "优秀";
} else if(score >= 80) {
grade = "良好";
} else if(score >= 70) {
grade = "中等";
} else if(score >= 60) {
grade = "及格";
} else {
grade = "不及格";
}
System.out.println("if-else版:" + grade);
// switch实现
switch(score / 10) {
case 10:
case 9:
grade = "优秀";
break;
case 8:
grade = "良好";
break;
case 7:
grade = "中等";
break;
case 6:
grade = "及格";
break;
default:
grade = "不及格";
}
System.out.println("switch版:" + grade);
}
}
}
关键技巧:
- 用score/10将百分制转换为switch可处理的离散值
- case 10和case 9共用同一段代码处理90-100分
- 先统一检查输入合法性,避免重复代码
- 两种实现结果应该一致,可以互相验证
三、调试改错题
下面这个"季节判断"程序有3处错误,请找出并修正:
import java.util.Scanner;
public class SeasonChecker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入月份(1-12):")
int month = sc.nextInt();
if (month >= 3 || month <= 5) {
System.out.println("春季");
} else if (month >=6 month <= 8) {
System.out.println("夏季");
} else if (month >=9 || month <=11) {
System.out.println("秋季");
} else (month ==12 || month ==1 || month ==2) {
System.out.println("冬季");
}
}
}
错误点及修正:
System.out.print()语句缺少分号
解析:Java语句必须以分号结尾,这是语法硬性要求- 第一个if条件错误使用了逻辑或(||)
修正:if (month >= 3 && month <= 5)
解析:判断范围应该用与(&&)运算符,用或(||)会导致所有月份都满足条件 - else后面多了条件判断
修正:else if (month ==12 || month ==1 || month ==2)
解析:else不能带条件,要么改成else if,要么直接else
完整修正版:
import java.util.Scanner;
public class SeasonChecker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入月份(1-12):");
int month = sc.nextInt();
if (month >= 3 && month <= 5) {
System.out.println("春季");
} else if (month >=6 && month <= 8) {
System.out.println("夏季");
} else if (month >=9 && month <=11) {
System.out.println("秋季");
} else if (month ==12 || month ==1 || month ==2) {
System.out.println("冬季");
}
}
}
测试建议:
- 测试边界月份:3月、5月、6月、8月、9月、11月、12月、1月、2月
- 测试非法输入:0、13等超出范围的数字
- 可以添加输入验证,确保月份在1-12之间