2021-10-20 Java错题集锦

这篇博客探讨了Java中Integer对象的创建和常量池的使用。通过示例代码展示了Integer对象通过new关键字创建时地址不相等,而使用Integer.valueOf或直接赋值时会复用常量池中的对象,导致比较结果为相等。同时,文章提到了字节码与内存管理的关系,以及异常处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
new URL的时候我们都要捕捉异常的(异常主要是检查是否存在我们的URL和实际的URL格式是否相同),而不管存在与否,都会返回URL的字符串形式

在这里插入图片描述
CGLib是动态生成字节码,而字节码是永久代里面的,像ABD都是会导致新生代,老年代溢出的。

在这里插入图片描述
接口并不继承Object类。

在这里插入图片描述
具体直接看下面的代码解释就好了。

    public static void main(String[] args){
        Integer i1 = new Integer(33);
        Integer i2 = new Integer(33);
        Integer i3 = 33;
        Integer i4 = Integer.valueOf(33);
        int i5 = 33;
        System.out.println(i1==i2);//False 两个对象地址就不一样
        System.out.println(i3==i4);//True  用的都是常量池中的地址,直接写int值的方式与Integer.valeOf的方式是一样的,使用到常量池
        System.out.println(i1==i5);//True  i5是基本数据类型,i1是包装类,所以会自动拆箱来比较值而不是比较地址值
        System.out.println(i3==i5);//True  同上
    }
很好,这是一个简单的数学题目生成程序,让我们一步一步来实现它。 首先,我们需要定义一些常量来表示题目类型,例如: ```java public static final int GRADE_ONE_ADD_SUB_1 = 1; // 一年级 10以内加减法:1步计算 public static final int GRADE_ONE_ADD_SUB_2 = 2; // 一年级 10以内加减法:2步计算 public static final int GRADE_ONE_ADD_SUB_3 = 3; // 一年级 10-20的加减法:1步计算和2步计算 public static final int GRADE_ONE_COMBINE = 4; // 一年级 综合训练 public static final int GRADE_TWO_ADD_NO_CARRY = 5; // 二年级 100以内不进位加法 public static final int GRADE_TWO_SUB_NO_BORROW = 6; // 二年级 100以内不退位减法 public static final int GRADE_TWO_ADD_CARRY = 7; // 二年级 100以内进位加法 public static final int GRADE_TWO_SUB_BORROW = 8; // 二年级 100以内退位减法 public static final int GRADE_TWO_COMBINE = 9; // 二年级 100以内连加连减 综合训练 ``` 接下来,我们需要定义一个函数来生成指定类型和数量的题目。我们可以使用一个 switch 语句来根据类型生成不同种类的题目,例如: ```java public static List<String> generateQuestions(int type, int count) { List<String> result = new ArrayList<>(); Random random = new Random(); switch (type) { case GRADE_ONE_ADD_SUB_1: // 一年级 10以内加减法:1步计算 for (int i = 0; i < count; i++) { int a = random.nextInt(10); int b = random.nextInt(10); if (random.nextBoolean()) { // 随机生成加法或减法 result.add(a + " + " + b + " = "); } else { result.add(a + " - " + b + " = "); } } break; case GRADE_ONE_ADD_SUB_2: // 一年级 10以内加减法:2步计算 for (int i = 0; i < count; i++) { int a = random.nextInt(10); int b = random.nextInt(10); int c = random.nextInt(10); result.add(a + " - " + b + " - " + c + " = "); } break; case GRADE_ONE_ADD_SUB_3: // 一年级 10-20的加减法:1步计算和2步计算 for (int i = 0; i < count; i++) { int a = random.nextInt(11) + 10; // 10-20之间的随机数 int b = random.nextInt(11); int c = random.nextInt(11); int d = random.nextInt(11); if (random.nextBoolean()) { // 随机生成加法或减法 result.add(a + " + " + b + " - " + c + " = "); } else { result.add(a + " - " + b + " + " + c + " - " + d + " = "); } } break; case GRADE_ONE_COMBINE: // 一年级 综合训练 for (int i = 0; i < count; i++) { int type2 = random.nextInt(3) + 1; // 随机选择上述三种类型的一种 result.addAll(generateQuestions(type2, 1)); } break; case GRADE_TWO_ADD_NO_CARRY: // 二年级 100以内不进位加法 for (int i = 0; i < count; i++) { int a = random.nextInt(90) + 10; // 10-99之间的随机数 int b = random.nextInt(10); result.add(a + " + " + b + " = "); } break; case GRADE_TWO_SUB_NO_BORROW: // 二年级 100以内不退位减法 for (int i = 0; i < count; i++) { int a = random.nextInt(90) + 10; // 10-99之间的随机数 int b = random.nextInt(a % 10 + 1); // 减数不大于个位数 result.add(a + " - " + b + " = "); } break; case GRADE_TWO_ADD_CARRY: // 二年级 100以内进位加法 for (int i = 0; i < count; i++) { int a = random.nextInt(90) + 10; // 10-99之间的随机数 int b = random.nextInt(10); if (a % 10 + b >= 10) { // 需要进位 result.add(a + " + " + b + " = "); } else { result.add(a + " + " + b + " = "); } } break; case GRADE_TWO_SUB_BORROW: // 二年级 100以内退位减法 for (int i = 0; i < count; i++) { int a = random.nextInt(90) + 10; // 10-99之间的随机数 int b = random.nextInt(10); if (a % 10 < b) { // 需要退位 result.add(a + " - " + b + " = "); } else { result.add(a + " - " + b + " = "); } } break; case GRADE_TWO_COMBINE: // 二年级 100以内连加连减 综合训练 for (int i = 0; i < count; i++) { int type2 = random.nextInt(4) + 5; // 随机选择上述四种类型的一种 result.addAll(generateQuestions(type2, 1)); } break; } return result; } ``` 接下来,我们需要实现一个函数来记录错题和错误次数。我们可以使用一个 Map 来记录每个题目的错误次数,例如: ```java public static Map<String, Integer> wrongQuestions = new HashMap<>(); public static void recordWrongQuestion(String question) { if (wrongQuestions.containsKey(question)) { wrongQuestions.put(question, wrongQuestions.get(question) + 1); } else { wrongQuestions.put(question, 1); } } ``` 最后,我们需要实现一个函数来读取和保存用户数据。我们可以使用 Java 的序列化机制来实现,例如: ```java public static void saveUserData(String username, UserData userData) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(username + ".dat")); oos.writeObject(userData); oos.close(); } public static UserData loadUserData(String username) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(username + ".dat")); UserData userData = (UserData) ois.readObject(); ois.close(); return userData; } ``` 完整代码如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值