当前位置: 首页 > web >正文

java上机测试错题回顾(3)

就算是下午一点钟才开始学,也不会怎么样哦。其实一天还有很久,睡多了就睡多了,玩了就玩了,要开始做就赶紧吧别焦虑自责,还有很多事情要做呢,不要慌一件一件做吧!

其实每次前面写一点是为了方便保存草稿和哄自己学...天啊时间不等人,快去!

1 GeometricObject g是什么意思?Circle circle = (Circle) g是什么意思?

package PTA_training.Test2_7;
/*
7-7 多态练习-计算面积
定义三个类,父类(抽象类)GeometricObject代表几何形状,
子类Circle代表圆形,子类Rectangle代表矩形。具体属性和方法如下:
父类 (抽象类)GeometricObject
属性:
private String color;
private String name;
为上述变量提供getter()和setter()方法
构造方法:为color和name初始化
public GeometricObject(String color, String name)
抽象方法:
public void findArea();用于计算几何图形的面积子类:
Circle
属性:
private double radius;半径
为上述变量提供getter()和setter()方法
构造方法:
设计构造方法为圆形的name,color和radius初始化
方法:
实现findArea()方法用于计算圆形的面积并返回计算结果子类:
Rectangle
属性:
private double width;宽
private double height;高
为上述变量提供getter()和setter()方法
构造方法:
设计构造方法为圆形的name,color,width和height初始化
方法:
实现findArea()方法用于计算矩形的面积并返回计算结果测试类Main
方法:
public static void main(String[] args) {创建圆形对象("长方形","蓝色",3.2,4.5)输出圆形的颜色和面积创建矩形对象("圆形","红色",3.4)输出矩形的颜色和面积
}
public static void show(GeometricObject  g){//形参传入圆形或者矩形的对象,输出其面积//判断传入的对象是圆形还是矩形//如果是圆形就输出圆形的颜色和面积;//如果是矩形就输出矩形的颜色和面积;
}
注意:1.所有类不用修饰词2.测试类名称为“Main”,否则编译出错在这里给出一组输入。例如:输出样例:在这里给出相应的输出。例如:矩形的颜色是:蓝色,面积是:14.4
圆形的颜色是:红色,圆形的面积是:36.31681107549801*/public class Main {public static void main(String[] args) {// 创建矩形对象Rectangle rectangle = new Rectangle("蓝色", "长方形", 3.2, 4.5);// 输出矩形的颜色和面积show(rectangle);// 创建圆形对象Circle circle = new Circle("红色", "圆形", 3.4);// 输出圆形的颜色和面积show(circle);}public static void show(GeometricObject g) {// 判断传入的对象是圆形还是矩形if (g instanceof Circle) {Circle circle = (Circle) g;System.out.printf("圆形的颜色是:%s,圆形的面积是:%.12f\n", circle.getColor(), circle.findArea());} else if (g instanceof Rectangle) {Rectangle rectangle = (Rectangle) g;System.out.printf("矩形的颜色是:%s,面积是:%.1f\n", rectangle.getColor(), rectangle.findArea());}}
}

GeometricObject g 是什么意思

在 public static void show(GeometricObject g) 这个方法定义中,GeometricObject g 是方法的参数声明。下面详细解释:

  • GeometricObject:这是参数的数据类型。GeometricObject 是一个抽象类,代表几何形状。这意味着该参数可以接收任何 GeometricObject 类型的对象,或者是 GeometricObject 子类的对象。因为在 Java 中,子类对象可以赋值给父类类型的引用变量,这是多态的一种体现。

  • g:这是参数的名称,是一个引用变量,用于在方法内部引用传入的对象。在方法 show 中,你可以使用 g 来访问该对象的属性和方法。

Circle circle = (Circle) g 是什么意思

Circle circle = (Circle) g 是一个类型转换操作,下面详细解释:

  • (Circle):这是强制类型转换运算符。它告诉编译器将 g 引用的对象当作 Circle 类型来处理。因为 g 是 GeometricObject 类型的引用,它可能指向一个 Circle 对象,也可能指向一个 Rectangle 对象(因为 Circle 和 Rectangle 都是 GeometricObject 的子类)。当你确定 g 实际上指向一个 Circle 对象时,就可以使用强制类型转换将其转换为 Circle 类型。

  • Circle circle:这是声明一个 Circle 类型的引用变量 circle

  • g:是之前传入方法的 GeometricObject 类型的引用变量。

示例代码解释

在你的 show 方法中,使用了类型判断和强制类型转换来处理不同的子类对象:

public static void show(GeometricObject g) {// 判断传入的对象是圆形还是矩形if (g instanceof Circle) {Circle circle = (Circle) g;System.out.printf("圆形的颜色是:%s,圆形的面积是:%.12f\n", circle.getColor(), circle.findArea());} else if (g instanceof Rectangle) {Rectangle rectangle = (Rectangle) g;System.out.printf("矩形的颜色是:%s,面积是:%.1f\n", rectangle.getColor(), rectangle.findArea());}
}

在这个方法中,首先使用 instanceof 运算符检查 g 引用的对象是否是 Circle 类型。如果是,则将 g 强制转换为 Circle 类型,并赋值给 circle 变量,然后就可以使用 circle 变量来调用 Circle 类特有的方法和属性。同样,如果 g 引用的对象是 Rectangle 类型,则将其强制转换为 Rectangle 类型,并进行相应的操作。

需要注意的是,如果 g 实际上不是 Circle 类型的对象,而你进行了 (Circle) g 这样的强制类型转换,会在运行时抛出 ClassCastException 异常。因此,在进行强制类型转换之前,通常需要使用 instanceof 进行类型检查。

2 与流相关的类

一些属于流相关的类,处理数据的输入输出操作:

BufferedWriter:是字符输出流类,继承自Writer,用于高效地将字符数据写入目的地,比如文件等,通过缓冲机制减少实际的I/O操作次数。

FileInputStream :属于字节输入流类,继承自InputStream,主要功能是从文件中按字节读取数据,适用于读取各种类型文件的原始字节内容。

ObjectInputStream:是对象输入流类,继承自InputStream,用于从输入流中反序列化对象,在实现对象持久化、网络传输对象等场景中使用。

InputStreamReader:是字符输入流类,作为字节流到字符流的桥梁,继承自Reader,可将字节流按照指定字符编码转换为字符流来读取数据。

3 字节流、字符流、以及类层次

做一个区分,例如 “java语言”,在字节流里面是8个字节,在字符流里面是6个字节

字节流

介绍:以字节(byte,1 字节 = 8 位)为基本处理单元的流。用于处理二进制数据,像图片、音频、视频等非文本类型的数据,以及不关注字符编码时对文本文件的读取 ,能处理所有类型数据。字节流操作时需手动进行编码转换。

  • 类层次 :
  • 字节输入流:基类是抽象类InputStream 。常见子类有:
    • ObjectInputStream:用于反序列化对象 。
    • DataInputStream:能以与机器无关方式读取基本 Java 数据类型 。
    • BufferedInputStream:为其他输入流添加缓冲功能,提高读取效率 。
    • ByteArrayInputStream:从字节数组读取数据 。
    • FileInputStream:从文件读取字节数据 。
    • 字节输出流:基类是抽象类OutputStream 。常见子类有:
      • FileOutputStream:向文件写入字节数据 。
      • ByteArrayOutputStream:向字节数组写入数据 。
      • BufferedOutputStream:为其他输出流添加缓冲功能 。
      • DataOutputStream:能以与机器无关方式写入基本 Java 数据类型 。
      • ObjectOutputStream:用于序列化对象并写入输出流 。

字符流

介绍:以 16 位的 Unicode 码表示的字符为基本处理单元的流,专门用于处理文本数据。读取数据时会按 JVM 默认编码自动将字节转换为字符,处理纯文本数据更方便,在处理多语言文本时很有用 。

  • 类层次 :
  • 字符输入流:基类是抽象类Reader 。常见子类有:
    • StringReader:从字符串读取数据 。
    • CharArrayReader:从字符数组读取数据 。
    • BufferedReader:为字符输入流提供缓冲,提高读取效率,有readLine()方法按行读取 。
    • FileReader:用于从文本文件读取字符数据 。
    • InputStreamReader:作为字节流到字符流的桥梁,可指定字符编码将字节流转换为字符流 。
    • 字符输出流:基类是抽象类Writer 。常见子类有:
      • OutputStreamWriter:字符流到字节流的桥梁,可指定字符编码将字符流转换为字节流 。
      • FileWriter:用于向文本文件写入字符数据 。
      • BufferedWriter:为字符输出流提供缓冲,提高写入效率,有newLine()方法写换行符 。
      • CharArrayWriter:向字符数组写入数据 。
      • StringWriter:向字符串写入数据 。

4 自定义异常类要创建类,extends

// 自定义异常类
class InvalidScoreException extends Exception {// 构造方法和 toString 方法
}

该文件定义了一个自定义异常类 InvalidScoreException,用于处理输入成绩无效的情况。

详细代码分析

java

package PTA_training.Test3_3;public class InvalidScoreException extends Exception {private int score;public InvalidScoreException(int score) {this.score = score;}@Overridepublic String toString() {return score + "invalid!";}
}
主要步骤
  1. 继承 Exception 类InvalidScoreException 类继承自 Exception 类,表明它是一个受检查异常。
  2. 存储无效分数:在构造函数中接收无效分数,并将其存储在私有变量 score 中。
  3. 重写 toString() 方法:返回一个包含无效分数的字符串,用于在异常发生时输出错误信息。

5 对比

原来错误百出的代码,甚至没有自定义异常类

package PTA_training.Test3_3;import java.util.Scanner;/*
7-3 成绩录入时的及格与不及格人数统计
编写一个程序进行一个班某门课程成绩的录入,
能够控制录入成绩总人数,
对录入成绩统计其及格人数和不及格人数。
设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,
程序将捕捉这个异常对象,
并调用执行该异常类对象的toString()方法,
该方法获取当前无效分数值,
并返回一个此分数无效的字符串。输入格式:
从键盘中输入学生人数n
从键盘中输入第1个学生的成绩
从键盘中输入第2个学生的成绩
...
从键盘中输入第n个学生的成绩
(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)输出格式:
显示及格总人数
显示不及格总人数
输入样例:
在这里给出一组输入。例如:
3
100
30
60
输出样例:
在这里给出相应的输出。例如:
2
1
输入样例:
在这里给出一组输入。例如:
2
200
69
30
输出样例:
在这里给出相应的输出。例如:
200invalid!
1
1*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n  = scanner.nextInt();int []scores = new int[]{scanner.nextInt()};int a = 0;for (int i = 0; i < n; i++) {try{boolean b = scores[i] > 0 && scores[i] < 100;} catch (Exception e) {System.out.println(scores[i]+"invalid");throw new RuntimeException(e);}if (scores[i] >= 60)a++;}System.out.println(a);System.out.println(n-a);scanner.close();}
}

现在写的:

package PTA_training.Test3_3;import java.nio.InvalidMarkException;
import java.util.Scanner;/*
7-3 成绩录入时的及格与不及格人数统计
编写一个程序进行一个班某门课程成绩的录入,
能够控制录入成绩总人数,
对录入成绩统计其及格人数和不及格人数。
设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,
程序将捕捉这个异常对象,
并调用执行该异常类对象的toString()方法,
该方法获取当前无效分数值,
并返回一个此分数无效的字符串。输入格式:
从键盘中输入学生人数n
从键盘中输入第1个学生的成绩
从键盘中输入第2个学生的成绩
...
从键盘中输入第n个学生的成绩
(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)输出格式:
显示及格总人数
显示不及格总人数
输入样例:
在这里给出一组输入。例如:
3
100
30
60
输出样例:
在这里给出相应的输出。例如:
2
1
输入样例:
在这里给出一组输入。例如:
2
200
69
30
输出样例:
在这里给出相应的输出。例如:
200invalid!
1
1*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] scores = new int[n];int a = 0;int b = 0;for (int i = 0; i < scores.length; i++) {while (true) {try {scores[i] = scanner.nextInt();if (scores[i] > 100 || scores[i] < 0)throw new InvalidScoreException(scores[i]);break;} catch (InvalidScoreException e) {throw new RuntimeException(e.toString());}}if (scores[i] >= 60)a++;elseb++;}scanner.close();System.out.println(a);System.out.println(b);}
}
package PTA_training.Test3_3;public class InvalidScoreException extends Exception {private int score;public InvalidScoreException(int score) {this.score = score;}@Overridepublic String toString() {return score + "invalid!";}
}

慢慢来,比较快,多实操 

http://www.xdnf.cn/news/9692.html

相关文章:

  • YOLOv11冻结训练+微调策略实战教程(含效果对比分析)
  • 运维三剑客——grep
  • 【动态规划】子数组系列(二)
  • GEO革命:重新定义AI时代的内容规则
  • 代码随想录算法训练营第五十二天
  • 【笔试训练4】Fibonacci数列|单词搜索|杨辉三角
  • 11、总账管理(GL)数字化转型:财务核心支柱,承担着业务系统复杂多变的重任
  • 测试W5500的第9步_使用SNTP实现网络时间同步
  • 尚硅谷redis7 63-69 redis哨兵监控之理论简介
  • javase JDK 环境变量配置
  • 关于线程死锁的相关知识
  • PortSwigger-01-信息泄露
  • 借助Java,让Cloudflare API为你的网站管理加速
  • 篇章五 数据结构——链表(一)
  • 【CAPL实战】LIN校验和测试
  • 电脑硬盘空间大量被占用怎么办
  • 低功耗双目云台监控设备采用国标控制装置
  • 扩散模型原理详解:从噪声到艺术的神奇之旅
  • win32相关(进程间通信)
  • RISC-V特权模式及切换
  • Python中质数筛选及优化效率对比
  • 什么是事务?事务的四大特性(ACID)?
  • 通信应用高速模数转换器ADC
  • Mysql时间函数
  • MODIS数据下载及处理
  • 电商平台 API、数据抓取与爬虫技术的区别及优势分析
  • linux目录
  • CTFSHOW-WEB-36D杯
  • Unity数字人开发笔记——人物模型
  • 【Redis】热点key问题,的原因和处理,一致性哈希,删除大key的方法