1.EnumTest.java
EnumTest.java中定义了枚举Size,该枚举包含SMALL、MEDIUM、LARGE三个常量。其运行结果体现了枚举的多项核心特性:
当用引用比较枚举变量s(Size.SMALL)与t(Size.LARGE)时,结果为false,这是因为二者是不同的枚举常量;调用s.getClass().isPrimitive()返回false,表明枚举属于引用类型,而非基本数据类型;s与通过Size.valueOf("SMALL")获取的枚举变量u进行引用比较时,结果为true,这说明同一名称的枚举常量是单例对象,即仅存在一个实例;通过Size.values()方法可获取包含所有枚举常量的数组,对该数组进行循环遍历,会依次输出SMALL、MEDIUM、LARGE。
这些结果清晰展现了枚举的特性:具有单例性,即每个常量仅存在一个实例;本质是引用类型,不属于原始数据类型;提供了便捷的工具方法,其中valueOf用于按名称获取对应常量,values用于获取所有常量以便遍历。此外,枚举的每个具体值都引用一个特定的对象,相同的值则引用同一个对象,因此对于枚举类型的变量,使用==和equals()方法进行比对时,结果是等价的。
2.
代码的输出结果为:第一行是X+Y=100200,第二行是300=X+Y。这是因为Java中字符串与其他类型的“+”操作遵循从左到右的运算顺序:对于"X+Y="+X+Y,最左侧以字符串"X+Y="开头,后续的“+”会将X(int型100)、Y(int型200)依次转为字符串进行拼接,最终得到"X+Y=100200";而对于X+Y+"=X+Y",最左侧是X+Y的数值运算(先计算出100+200=300),之后再将结果与字符串"=X+Y"进行拼接,因此得到"300=X+Y"。
3.随机生成四则运算题目
import java.util.Scanner;
import java.util.Random;
import java.util.InputMismatchException;
public class ArithmeticPractice {
// 定义运算符
private static final char[] OPERATORS = {'+', '-', '', '/'};
private Scanner scanner;
private Random random;
private int totalQuestions;
private int correctAnswers;
public ArithmeticPractice(int totalQuestions) {
this.scanner = new Scanner(System.in);
this.random = new Random();
this.totalQuestions = totalQuestions;
this.correctAnswers = 0;
}
// 生成随机数字(1-100之间)
private int generateNumber() {
return random.nextInt(100) + 1;
}
// 生成随机运算符
private char generateOperator() {
return OPERATORS[random.nextInt(OPERATORS.length)];
}
// 计算结果
private int calculate(int num1, int num2, char operator) {
switch (operator) {
case '+':
return num1 + num2;
case '-':
// 确保结果不为负数
return num1 > num2 ? num1 - num2 : num2 - num1;
case '':
return num1 * num2;
case '/':
// 确保可以整除且除数不为0
if (num2 == 0) return 0;
// 调整数字使除法可以整除
return (num1 * num2) / num2;
default:
return 0;
}
}
// 运行练习
public void startPractice() {
System.out.println("欢迎参加四则运算练习!");
System.out.println("共" + totalQuestions + "道题,请输入答案(整数):\n");
for (int i = 0; i < totalQuestions; i++) {
int num1 = generateNumber();
int num2 = generateNumber();
char operator = generateOperator();
// 对于减法,确保被减数大于减数
if (operator == '-') {
if (num1 < num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
}
// 对于除法,确保可以整除
else if (operator == '/') {
// 避免除数为0,并且确保可以整除
num2 = num2 == 0 ? 1 : num2;
num1 = num1 * num2; // 确保可以整除
}
int correctResult = calculate(num1, num2, operator);
// 显示题目
System.out.printf("第%d题:%d %c %d = ? ", (i + 1), num1, operator, num2);
// 获取用户答案
int userAnswer = 0;
boolean validInput = false;
while (!validInput) {
try {
userAnswer = scanner.nextInt();
validInput = true;
} catch (InputMismatchException e) {
System.out.print("输入错误,请输入一个整数:");
scanner.next(); // 清除错误输入
}
}
// 判断答案是否正确
if (userAnswer == correctResult) {
System.out.println("正确!");
correctAnswers++;
} else {
System.out.println("错误,正确答案是:" + correctResult);
}
System.out.println();
}
// 显示结果
showResult();
scanner.close();
}
// 显示练习结果
private void showResult() {
System.out.println("练习结束!");
System.out.println("总题数:" + totalQuestions);
System.out.println("做对:" + correctAnswers + "题");
System.out.println("做错:" + (totalQuestions - correctAnswers) + "题");
System.out.printf("正确率:%.2f%%\n", (correctAnswers * 100.0) / totalQuestions);
}
public static void main(String[] args) {
// 生成30道题
ArithmeticPractice practice = new ArithmeticPractice(30);
practice.startPractice();
}
}