Java作业8-泛型和模板类

编程1

题目

自定义堆栈类

用泛型数组实现自定义堆栈类GenericStack,可处理任意类型数据。 

堆栈类中包含三个成员,一为泛型类型数组list,保存栈中元素,一为整型成员length表示数组的长度,一为整型成员count表示当前栈中元素个数。

其中堆栈类功能中要求至少包含以下几点:

  • 不带参数构造方法和带一个长度参数构造方法,堆栈的初始长度为10
  • 入栈push操作和出栈pop操作
  • 访问栈顶元素peek方法
  • 获得栈中当前保存元素数size方法
  • 判断当前栈是否为空isEmpty方法
  • printStack方法,显示堆栈中保存的所有元素,元素之间以空格分割,最后一个元素后无空格

定义一测试方法,可分别构建整数类型、浮点类型、字符串类型堆栈进行测试,对每个栈自行调用上述至少三种方法实现操作,并显示堆栈中元素

代码

import java.util.*;
public class GenericStack<E>{
	//数据
	private E[] list;
	private int length;//数组长度
	private int count;//栈中元素个数
	//构造
	public GenericStack(){
		length = 10;
		list = (E[])(new Object[ length ]);
	}
	
	public GenericStack( int length ){
		this.length = length;
		list = (E[])(new Object[ length ]);
	}
	//方法
	public void push( E num ){
		list[count++] = num;
	}
	
	public E pop(){
		E num = list[ --count ];
		return num;
	}
	
	public E peek(){
		return list[count-1];
	}
	
	public boolean isEmpty(){
		return count==0;
	}
	
	public void printStack() {
		for(int i = 0;  i < count - 1; i++) {
			System.out.print(this.list[i] + " ");
		}
		System.out.print(this.list[this.count-1]);
		System.out.println();
	}
	
	public static void main( String[] args ){
		GenericStack<Integer> stack = new GenericStack<Integer>( );
		for(int i = 0; i < 10; i++) {
			stack.push(i);
		}
		System.out.println("stack栈:");
		stack.printStack();
		System.out.println("stack是否为空:"+ stack.isEmpty());
		System.out.println("stack栈顶元素是:" + stack.peek());
		
		GenericStack<Float> stack1 = new GenericStack<Float>(11);
		stack1.push(1.1F);
		stack1.push(2.2F);
		stack1.push(3.3F);
		System.out.println("stack1栈:");
		stack1.printStack();
		System.out.println("出栈元素是:" + stack1.pop());
		stack1.peek();
		System.out.println("出栈后的栈顶元素是:" + stack1.peek());
		
		GenericStack<String> stack2 = new GenericStack<String>(12);
		stack2.push("好好学习,");
		stack2.push("天天向向上。");
		stack2.push("你们就像是早晨八九点钟的太阳。");
		System.out.println("stack2栈:");
		stack2.printStack();
		System.out.println("出栈元素是:" + stack2.pop());
		System.out.println("stack2栈出栈后:");
		stack2.printStack();
	}
}
stack栈:
0 1 2 3 4 5 6 7 8 9
stack是否为空:false
stack栈顶元素是:9
stack1栈:
1.1 2.2 3.3
出栈元素是:3.3
出栈后的栈顶元素是:2.2
stack2栈:
好好学习, 天天向向上。 你们就像是早晨八九点钟的太阳。
出栈元素是:你们就像是早晨八九点钟的太阳。
stack2栈出栈后:
好好学习, 天天向向上。

编程2

题目

泛型数组操作

利用泛型定义一数组操作类GenericOperator,操作对象为数值类型数组,其中数值类型包括Integer, Short, Byte, Double, Float等。

在操作类中提供若干静态方法,实现对任意数值类型数组的下述操作,

1. 求平均值 averageValue(T[] t) 

2. 求数组最大元素 maxElement(T[] t) 

3. 对数组元素采用冒泡方法进行排序 bubbleSort(T[] t) 

4. 对数组元素利用选择排序方法进行排序 selectionSort(T[] t) 

5. 求两长度相同数组的和(对应元素的和) arraySum(T[] ta, T[] tb)

6. 输出数组元素 print(T[] list)

在此基础上定义测试类,测试各方法功能是否正常

代码

class GenericOperator <T extends Number> {

	public static <T extends Number> double averageValue(T[] array) {
        double sum = 0;
        for (T item : array) {
            sum += item.doubleValue(); //xxxValue() 方法用于将 Number 对象转换为 xxx 数据类型的值并返回
        }
        return sum / array.length;
    }
	
	public static <T extends Comparable<T>> T maxElement(T[] array) { //Comparable是个接口
        T max = array[0];
        for (T item : array) {
            if (item.compareTo(max) > 0) { //compareTo()方法
                max = item;
            }
        }
        return max;
    }
	
	public static <T extends Comparable<T>> void bubbleSort(T[] array) { //从小到大
		boolean flag;
		for( int i = 0; i < array.length -1; i++ ) {循环n-1轮
			flag = false; //元素是否发生交换的标志
			for( int j = array.length - 1; j > i; j-- ) {
				if(array[j].compareTo(array[j-1]) < 0 ) { //等价于:if(array[j] < array[j-1]);
					T temp = array[j-1];
					array[j-1] = array[j];
					array[j] = temp;
					flag = true;
				}	
			}
			if(false == flag) //如果一趟比较没有发生任何交换,说明有序,提前结束排序
				return;
		}
	}
	
	public static <T extends Comparable<T>> void selectionSort(T[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[j].compareTo(array[minIndex]) < 0) {
                    minIndex = j;
                }
            }
            T temp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = temp;
        }
    }
	
	public static <T extends Number> Number[] arraySum(T[] a, T[] b) {
        Number[] arraysum = new Number[a.length];
		for( int i = 0; i < a.length; i++ ){
            arraysum[i] = a[i].doubleValue() + b[i].doubleValue();
        }
		return arraysum;
    }
	
	public static <T> void print(T[] array) {
        for (T item : array) {
            System.out.print(item + " ");
        }
		System.out.println();
    }
}
public class Test {
	
	public static void main( String[] args ) {
		Integer[] integer = {5, 4, 3, 2, 1};
		System.out.println("integer的平均值为:" + GenericOperator.averageValue(integer));
		System.out.println("integer的最大值为:" + GenericOperator.maxElement(integer));
		GenericOperator.bubbleSort(integer);
		System.out.print("integer冒泡排序从小到大排:");
		GenericOperator.print(integer);
		
		System.out.println();
		
		Double[] Double = {9.9, 8.8, 7.7, 6.6, 5.5};
		System.out.println("Double的平均值为:" + GenericOperator.averageValue(Double));
		System.out.println("Double的最大值为:" + GenericOperator.maxElement(Double));
		GenericOperator.selectionSort(Double);
		System.out.print("double选择排序从小到大排:");
		GenericOperator.print(Double);
				
		System.out.println();
				
	    Number[] arraysum = GenericOperator.arraySum(integer,Double);
		System.out.print("integer + Double:");
		GenericOperator.print(arraysum);
	}
}
integer的平均值为:3.0
integer的最大值为:5
integer冒泡排序从小到大排:1 2 3 4 5

Double的平均值为:7.7
Double的最大值为:9.9
double选择排序从小到大排:5.5 6.6 7.7 8.8 9.9

integer + Double:6.5 8.6 10.7 12.8 14.9

编程3

声明:放五一假没来的及做完,系统就给我自动提交了

编程4

声明:放五一假没来的及做完,系统就给我自动提交了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/600206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QSPI的使用

Quad SPI接口(QSPI)是一种同步串行数据链路,在主模式下提供与外部设备的通信。它类似于SPI协议,只是它有额外的数据线。 普通SPI有四条通信线路:芯片选择、时钟、MOSI和MISO。对于QSPI,可提供额外的数据线。因此,命令/数据/地址是根据所选模式通过单、四或双IO发送的。由…

网络安全之动态路由OSPF基础

OSPF&#xff1a;开放式最短路径优先协议。 1、协议使用范围&#xff1a;IGP。 2、协议算法特点&#xff1a;链路状态型路由协议。 3、协议是否传递网络掩码&#xff1a;传递网络掩码&#xff08;无类别的路由协议&#xff09;。 4、协议封装&#xff1a;基于IP协议封装&am…

【Linux系统编程】1-文件IO操作

文章目录 1 概述2 文件描述符3 文件I/O操作3.1 打开文件操作3.2 关闭文件操作3.3 向文件写入数据3.4 从文件读取数据 4 给文件描述符添加非阻塞特性4.1 当此文件描述符不存在4.2 当此文件描述符存在 5 获取文件状态信息6 文件目录操作6.1 打开目录操作6.2 读取目录信息6.3 关闭…

窃鈇逃债,赧然惭愧——“天下共主”周赧王的结局

引子&#xff0c;债台高筑 周赧王五十九年&#xff08;前256年&#xff09;&#xff0c;雒邑王都内&#xff0c;大周第三十七代天子、年近八十的周赧王姬延困坐在王宫内的高台上&#xff0c;愁容满面、沮丧悲切、束手无策&#xff1b;而王宫宫墙外不远处&#xff0c;是一大帮举…

VMware与CentOS的安装

VMware与CentOS的安装 第一章 VMware安装第二章 CentOS上网虚拟机网络IP修改地址配置修改主机名和hosts文件修改主机名称配置Linux克隆机主机名称映射hosts文件&#xff0c;打开/etc/hosts 安装Xshell7和Xftp7 第一章 VMware安装 VMware Workstation Pro 安装包 …

【再探】设计模式—适配器、装饰及外观模式

结构型设计模式是用于设计对象和类之间关系的一组设计模式。一共有7种&#xff1a;适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式及代理模式。 1 适配器模式 需求&#xff1a;在软件维护阶段&#xff0c;已存在的方法与目标接口不匹配&#xff0c;需要个中…

Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机

一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun&#xff08;我是linux aarch64,所以选择了对应压缩包解压&#xff09; Windows系统 1.双击安装包进入安装界面&…

【Qt 学习笔记】Qt常用控件 | 输入类控件 | Date/Time Edit的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 输入类控件 | Spin Box的使用及说明 文章编号&#xff1…

【牛客】[HNOI2003]激光炸弹

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 注意从&#xff08;1,1&#xff09;开始存即可&#xff0c;所以每次输入x,y之后&#xff0c;要x,y。 因为m的范围最大为…

nginx--FastCGI

CGI 概念 nginx通过与第三方基于协议实现&#xff0c;即通过某种特定协议将客户端请求转发给第三方服务处理&#xff0c;第三方服务器会新建新的进程处理用户的请求&#xff0c;处理完成后返回数据给Nginx并回收进程(下次处理有需要新建)&#xff0c;最后nginx在返回给客户端…

5.7 线程

进程&#xff1a;解耦稳定&#xff0c;内容之间是不相关的&#xff0c;通信不便利&#xff0c;理论上进程的软硬件的切换时间以及创建开销非常大。--------》资源共享线程实现 线程的问题&#xff1a;本质就是不解耦&#xff0c;一个出问题别的就很有可能出问题&#xff0c;同…

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台

YoloDeployCsharp|基于.NET Framework的YOLO深度学习模型部署测试平台 1. 项目介绍2. 支持模型3. 时间测试4. 总结 1. 项目介绍 基于.NET Framework 4.8 开发的深度学习模型部署测试平台&#xff0c;提供了YOLO框架的主流系列模型&#xff0c;包括YOLOv8~v9&#xff0c;以及其系…

python实现的信号合成分析系统(DSP)

python实现的信号合成分析系统(DSP) 流程 1、在QT界面上设置好信号频率,采样频率,采样点数 2、使用np构建sin函数 3、使用matplotlib画出 4、分别分析合成信号的FFT频域信息1、效果图 2、示例代码 def btn_com_clicked(self):# 信号合成分析Fs = self.com_fs_edit_value #…

HarmonyOS开发案例:【电子相册】

介绍 如何实现一个简单的电子相册应用的开发&#xff0c;主要功能包括&#xff1a; 实现首页顶部的轮播效果。 实现页面跳转时共享元素的转场动画效果。 实现通过手势控制图片的放大、缩小、左右滑动查看细节等效果。 相关概念 [Swiper]&#xff1a;滑块视图容器&#x…

cmake install命令无法覆盖同名文件

文章目录 1. 问题记录2. 原因排查3. 解决方案 1. 问题记录 我有两个同名文件test.txt&#xff0c;它们内容不同&#xff0c;但时间戳相同&#xff08;文件属性中的修改时间相同&#xff09; 我希望在cmake中利用install命令&#xff0c;将${PATH_SRC}/test.txt替换${PATH_DES…

Elasticsearch:使用 MongoDB connector 同步数据到 Elasticsearch

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。Elasticsearch 是一个高效强…

[CISCN2019 华北赛区 Day1 Web2]ikun

看到提示说一定要找到lv6 这要写脚本来爆破了&#xff0c;用bp是爆破不出来的 发现LV等级都是有参数挂着的 写个脚本看一下 import requests for i in range(1,1000):payload"http://node4.anna.nssctf.cn:28150/shop?page%d"%(i)resrequests.get(payload)if "…

【PCIE】基于PCIE4C的数据传输(四)——使用MSIX中断

基于PCIE4C的数据传输&#xff08;三&#xff09;——遗留中断与MSI中断 一文介绍了遗留中断与MSI中断两种中断方式的代码实现&#xff0c;本文继续基于Xilinx UltrascaleHBM VCU128开发板与linux&#xff08;RHEL8.9&#xff09;&#xff0c;介绍MSIX中断方式的代码实现。本文…

矩阵的压缩存储介绍

引入 概述 特殊矩阵的压缩 对称矩阵 三角矩阵 对角矩阵 稀疏矩阵 三元组存储 十字链表法 示例

java:递归实现的案例

//求第20个月兔子的对数 //每个月兔子对数&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8 public class Test {//求第20个月兔子的对数//每个月兔子对数&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8pu…
最新文章