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

Java期末总复习 编程题(偏基础)

71. ①编写一个含 2 个属性的类,并为其设计有参构造方法,再设计一个用于显示属性值的方法。②编写该类的一个子类,除继承父类的 2 个属性外再增加一个属性,并创建有参构造方法对 3个属性初始化,重写显示属性的方法用于输出 3 个属性的值。③编写一个测试类,分别创建父类和子类的对象实例并显示各自的属性值。

package absReview.demo071;public class ParentClass {protected String name;protected int age;public ParentClass(String name, int age) {this.name = name;this.age = age;}public void display() {System.out.println("父类属性" + name + ";" + age);}
}
package absReview.demo071;public class SubClass extends ParentClass{private String address;public SubClass(String name, int age, String address) {super(name, age);this.address = address;}@Overridepublic void display() {super.display();System.out.println("子类新增属性:"+address);}
}
package absReview.demo071;public class Test {public static void main(String[] args) {ParentClass parent = new ParentClass("张三", 40);parent.display();SubClass child = new SubClass("张四", 20, "北京");child.display();}
}

72. ①设计几何接口用于计算二维几何图形的面积。②设计圆类实现几何接口,计算圆的面积。③设计矩形类也实现几何接口,计算矩形的面积。④设计柱体类,以几何接口和高为属性并设计有参构造方法,然后设计计算体积的方法,调用几何接口的求面积方法计算底面积,乘以高得到体积。⑤设计测试类,以几何接口分别引用矩形实例和圆实例,然后调用具有多态特性的计算面积方法计算机出矩形和圆的面积,乘以高后算出方柱体和圆柱的体积。

package absReview.demo072;public class Circle implements Geometry {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double calculateArea() {return Math.PI * radius * radius;}
}
package absReview.demo072;public class Cylinder{private Geometry base;private double height;public Cylinder(Geometry base, double height) {this.base = base;this.height = height;}public double calculateVolume() {double baseArea = base.calculateArea();return baseArea*height;}
}
package absReview.demo072;public interface Geometry {double calculateArea();
}
package absReview.demo072;public class Rectangle implements Geometry {private double x;private double y;public Rectangle(double x, double y) {this.x = x;this.y = y;}@Overridepublic double calculateArea() {return x*y;}
}
package absReview.demo072;public class Test {public static void main(String[] args) {Geometry circle = new Circle(5);Geometry rectangle = new Rectangle(5, 5);double circleArea = circle.calculateArea();System.out.println("circleArea = " + circleArea);double rectangleArea = rectangle.calculateArea();System.out.println("rectangleArea = " + rectangleArea);Cylinder cylinder = new Cylinder(circle, 10);Cylinder squarePillar = new Cylinder(rectangle, 10);System.out.println("cylinderVolume = " + cylinder.calculateVolume());System.out.println("squarePillarVolume = " + squarePillar.calculateVolume());}
}

73. 设计一个多线程程序,模拟在 3 个窗口争抢卖 50 张票的操作。

package absReview.demo073;public class TicketSeller implements Runnable {private int tickets = 50;private int currticket = 1;@Overridepublic void run() {int ticketNum;while (true) {synchronized (this) {if (currticket > tickets) {break;}ticketNum = currticket++;}try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName() + " sells " + ticketNum);}}public static void main(String[] args) {TicketSeller t = new TicketSeller();new Thread(t, "window1").start();new Thread(t, "window2").start();new Thread(t, "window3").start();}
}

74. ①设计一个数组排序类,编写静态排序方法,利用双层嵌套循环实现对一维整型数组的排序。②设计测试类,初始化一个一维数组,然后调用排序方法完成数组排序,然后利用增强 for 循环输出排序后的数组各元素。③若要改为可对任意类型数组排序,则需要修改哪两处?若要对一个自定义类的对象实例数组排序,这个类应该如何设计?

package absReview.demo074;public class ArraySorter {public static void sort(int[] arr) {int n = arr.length;for (int i = 0; i < n-1; i++) {for (int j = 0; j < n- 1- i; j++) {if (arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
}
package absReview.demo074;public class SortTest {public static void main(String[] args) {int[] nums = {3,1,5,3,2,4};ArraySorter.sort(nums);for (int num : nums) {System.out.println(num+" ");}}
}

75. ①设计一个计算周长和面积的接口。②创建圆类实现该接口的方法,重写 toString 方法用于描述该圆,输出圆的半径、周长和面积。③设计测试类,请求键盘输入圆的半径,然后输出该圆的信息

package absReview.demo075;public interface Shape {double calculatePerimeter();double calculateArea();
}
package absReview.demo075;public class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double calculatePerimeter() {return 2*Math.PI*radius;}@Overridepublic double calculateArea() {return Math.PI*radius*radius;}@Overridepublic String toString() {return "圆的半径为"+radius +" "+"圆的周长为"+calculatePerimeter()+"圆的面积为"+calculateArea();}
}
package absReview.demo075;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入圆的半径:");double radius = sc.nextDouble();Circle circle = new Circle(radius);System.out.println(circle.toString());}
}

76. 从键盘读入 n 个整数(n<=1000),统计每个数出现的次数,从小到大输出每个出现过的数,及每个数出现的次数。

package absReview.demo076;import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入你要输入的整数个数:");int n = sc.nextInt();System.out.println("输入你的"+n+"个整数:");int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[i] =  sc.nextInt();}Map<Integer,Integer> countMap = new TreeMap<Integer,Integer>();for (int i : arr) {
//            if (countMap.containsKey(i)) {
//                // 键已存在,取出当前值并加1
//                int count = countMap.get(i);
//                countMap.put(i, count + 1);
//            } else {
//                // 键不存在,初始化计数为1
//                countMap.put(i, 1);
//            }countMap.put(i,countMap.getOrDefault(i,0) + 1);}System.out.println("输出结果:");for(Map.Entry<Integer,Integer> entry : countMap.entrySet()) {System.out.println(entry.getKey()+"出现"+entry.getValue()+"次");}}
}

77. 编程计算中华人民共和国自成立至今的天数。

package absReview.demo077;import java.util.Calendar;public class NationDay {public static void main(String[] args) {//获取新中国成立时间Calendar foundDay = Calendar.getInstance();foundDay.set(1949, Calendar.OCTOBER,1);Calendar currentDay = Calendar.getInstance();long diffMillis = currentDay.getTimeInMillis() - foundDay.getTimeInMillis();int diffDays = (int) (diffMillis / (24 * 60 * 60 * 1000));System.out.println(diffDays);}
}

78. 编程基于 Socket 的服务器端通信程序,用于读取一行客户端发送的信息,并在控制输出,然后向客户回复“你的信息已收到”。

package absReview.demo078;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(8888);System.out.println("服务端启动,等待客户端连接......");Socket s = ss.accept();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));PrintWriter out = new PrintWriter(s.getOutputStream(), true);String clientMsg = in.readLine();System.out.println("客户端:" + clientMsg);out.println("您的信息已收到");}
}
package absReview.demo078;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Socket socket = new Socket("localhost", 8888);Scanner sc = new Scanner(System.in);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));System.out.println("请输入:");String input = sc.nextLine();out.println(input);String serverResponse = in.readLine();System.out.println("服务端"+serverResponse);}
}

79. ①设计一个计算周长和面积的接口。②创建矩形类实现该接口的方法,重写 toString 方法用于描述该矩形,输出其长、宽、周长和面积。③设计测试类,创建一个矩形实例并调用 toString方法输出该矩形的描述信息。

package absReview.demo079;public interface Shape {double calculatePerimeter();double calculateArea();
}
package absReview.demo079;public class Rectangle implements Shape {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double calculatePerimeter() {return (width + height)*2;}@Overridepublic double calculateArea() {return width*height;}@Overridepublic String toString() {return "长:"+width+" 宽:"+height+" 周长:"+calculatePerimeter()+" 面积:"+calculateArea();}
}
package absReview.demo079;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入矩形的边1:");double width = sc.nextDouble();System.out.println("请输入矩形的边2:");double height = sc.nextDouble();Rectangle rectangle = new Rectangle(width, height);System.out.println(rectangle.toString());}
}

80. 将一个数组、一行字符串和一个布尔值通过对象输出流写入一个文件中,然后使用对象输入流读出之前写入的数据并输出。

package absReview.demo080;import java.io.*;public class fileTest {public static void main(String[] args) {// 写入数据到文件try (FileOutputStream fos = new FileOutputStream("C:\\c_learning\\review.txt");ObjectOutputStream oos = new ObjectOutputStream(fos)) {int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};oos.writeObject(nums);String text = "Hello World";oos.writeObject(text);boolean flag = true;oos.writeBoolean(flag);System.out.println("数据写入完成");} catch (IOException e) {System.err.println("写入文件时出错: " + e.getMessage());e.printStackTrace();}// 从文件读取数据try (FileInputStream fis = new FileInputStream("C:\\c_learning\\review.txt");ObjectInputStream ois = new ObjectInputStream(fis)) {int[] readNumbers = (int[]) ois.readObject();System.out.println("\n读取的数组:");for (int num : readNumbers) {System.out.print(num + " ");}String readText = (String) ois.readObject();System.out.println("\n读取的文本: " + readText);boolean readFlag = ois.readBoolean();System.out.println("读取的布尔值: " + readFlag);} catch (FileNotFoundException e) {System.err.println("文件未找到: " + e.getMessage());} catch (ClassNotFoundException e) {System.err.println("找不到类: " + e.getMessage());} catch (IOException e) {System.err.println("读取文件时出错: " + e.getMessage());} catch (Exception e) {System.err.println("发生未知错误: " + e.getMessage());}}
}

81. 编写 TCP Socket 双向通信程序,模拟简单 QQ 聊天功能

package absReview.demo081;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class QQServer {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(8888);Socket clientSocket = ss.accept();BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));System.out.println("服务端启动,等待用户连接……");System.out.println("客户端已连接,输入(exit)退出:");new Thread(() -> {try {String clientMsg;while((clientMsg = in.readLine())!= null){if(clientMsg.equals("exit")){System.out.println("客户端已退出,聊天结束");return;}System.out.println("客户端消息"+clientMsg);}} catch (IOException e) {throw new RuntimeException(e);}}).start();String serverMsg;while(true) {serverMsg = stdin.readLine();out.println(serverMsg);if (serverMsg.equalsIgnoreCase("exit")){System.out.println("服务端已退出,聊天结束");break;}}}
}
package absReview.demo081;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class QQClient {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1", 8888);
//        // 1. 从Socket获取输入流(网络数据)
//        InputStream socketInputStream = socket.getInputStream();        // 原始字节流
//        InputStreamReader socketReader = new InputStreamReader(socketInputStream); // 字节转字符
//        BufferedReader in = new BufferedReader(socketReader);           // 带缓冲的字符流
//2. 向Socket发送输出流(网络数据)
//        OutputStream socketOutputStream = socket.getOutputStream();      // 原始字节流
//        PrintWriter out = new PrintWriter(socketOutputStream, true);     // 自动刷新的打印流
//3. 从控制台获取输入流(用户输入)
//        InputStream systemInputStream = System.in;                        // 标准输入字节流
//        InputStreamReader systemReader = new InputStreamReader(systemInputStream); // 字节转字符
//        BufferedReader stdin = new BufferedReader(systemReader);          // 带缓冲的字符流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));System.out.println("连接到服务端,输入(exit)退出:");new Thread(() -> {try {String serverMsg;while((serverMsg = in.readLine()) != null) {if("exit".equals(serverMsg)) {System.out.println("服务端已退出,聊天结束");return;}System.out.println("服务端消息"+serverMsg);}} catch (IOException e) {throw new RuntimeException(e);}}).start();String clientMsg;while((clientMsg = stdin.readLine()) != null) {out.println(clientMsg);if("exit".equals(clientMsg)) {System.out.println("客户端已退出,聊天结束");break;}}}
}

相关文章:

  • Python数据可视化再探——Matplotlib模块 之一
  • Unity入门学习(四)3D数学(4)之四元数Quaternion
  • python新手学习笔记①
  • Vue2到Vue3迁移问题解析
  • uniapp-商城-63-后台 商品列表(分类展示商品的删除)
  • GO语言学习(六)
  • Python实战:打造一个功能完整的单位转换器(长度/温度/货币)
  • 5.20打卡
  • 解决git中断显示中文为八进制编码问题
  • StreamSaver实现大文件下载解决方案
  • 基于R语言的贝叶斯网络建模:生态与环境因果推断实践
  • Linux网络编程:广播、组播与原始套接字
  • DAY31
  • 电力设备智能化方案复盘
  • AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型
  • Y1大型游乐设施修理作业包含哪些
  • win10使用nginx做简单负载均衡测试
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(25):受身形(3)
  • MySQL 8.0 OCP 英文题库解析(七)
  • 《Android 应用开发基础教程》——第十三章:权限管理机制与运行时权限请求(以拍照/存储为例)
  • 国家发改委:城市更新项目必须建立多元化多层级资金投入机制
  • 中国戏剧梅花奖终评结果公示,蓝天和朱洁静等15名演员入选
  • 多所院校高规格召开考研动员会,有学院考研报名率达84%
  • 中美贸易代表会谈后是否已确定下一次会谈?外交部回应
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿元
  • 征稿启事|澎湃·镜相第三届非虚构写作大赛暨2026第六届七猫现实题材征文大赛