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 5Double的平均值为:7.7
Double的最大值为:9.9
double选择排序从小到大排:5.5 6.6 7.7 8.8 9.9integer + Double:6.5 8.6 10.7 12.8 14.9

编程3

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

编程4

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SRC公益漏洞挖掘思路分享

0x00 前言 第一次尝试挖SRC的小伙伴可能会觉得挖掘漏洞非常困难&#xff0c;没有思路&#xff0c;不知道从何下手&#xff0c;在这里我分享一下我的思路 0x01 挖掘思路 确定自己要挖的漏洞&#xff0c;以及该漏洞可能存在的功能点&#xff0c;然后针对性的进行信息收集 inurl…

LeetCode 每日一题 ---- 【741.摘樱桃】

LeetCode 每日一题 ---- 【741.摘樱桃】 741.摘樱桃方法&#xff1a;动态规划 741.摘樱桃 方法&#xff1a;动态规划 这是一道动态规划的题目&#xff0c;enmmmm&#xff0c;依旧是做不出来&#xff0c;尤其是看到困难两个标红的字体&#xff0c;就更不想做了&#xff0c;然后…

一起深度学习(AlexNet网络)

AlexNet神经网络 代码实现&#xff1a; 代码实现&#xff1a; import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(# 采用了11*11的卷积核来捕捉对象&#xff0c;因为原始输入数据比较大#步幅为4 &#xff0c;可减少输出的高度核宽度。#输出通…

【算法刷题day41】Leetcode:343. 整数拆分、96. 不同的二叉搜索树

文章目录 Leetcode 343. 整数拆分解题思路代码总结 Leetcode 96. 不同的二叉搜索树解题思路代码总结 草稿图网站 java的Deque Leetcode 343. 整数拆分 题目&#xff1a;343. 整数拆分 解析&#xff1a;代码随想录解析 解题思路 通过两轮循环&#xff0c;分别找到每个数的最大…

FineReport高频面试题及参考答案

FineReport是一款利用什么语言开发的报表工具&#xff1f; FineReport是一款基于Java语言开发的报表工具。Java是一种广泛使用的编程语言&#xff0c;特别适合于跨平台的软件开发。FineReport利用Java语言的诸多优势&#xff0c;如稳定性、安全性、可移植性和强大的网络功能&a…

Compose 状态管理

文章目录 Compose 状态管理概述使用MutableStaterememberStatelessComposable & StatefulComposable状态提升rememberSaveable支持parceable不支持parceable 使用ViewModelViewModelProvider.Factory 使用Flow Compose 状态管理 概述 当应用程序的状态发生变化时&#xf…

(40)4.30数据结构(队列)

1.队列的基本概念 2.队列的顺序 #define MaxSize 10 #define ElemType int typedef struct { ElemType data[MaxSize]; int front, rear; }SqQueue;//1.初始化操作 void InitQueue(SqQueue& Q) { //初始化 队头&#xff0c;队尾指针指向0 Q.rear Q.fron…

环形链表理解||QJ141.环形链表

在链表中&#xff0c;不光只有普通的单链表。之前写过的的一个约瑟夫环形链表是尾直接连向头的。这里的环形链表是从尾节点的next指针连向这链表的任意位置。 那么给定一个链表&#xff0c;判断这个链表是否带环。qj题141.环形链表就是一个这样的题目。 这里的思路是用快慢指…

B3966 [语言月赛 202404] 道法考试

题目背景 你正在参加一场道法考试。这次的道法考试题目全部都是问答题。 题目描述 有 n 道题目&#xff0c;每道题标准答案都是 m 个整数&#xff0c;代表答案包含的知识点的编号。 而你对于第 i&#xff08;1≤i≤n&#xff09;道题的作答是 li​ 个整数&#xff0c;代表作…

jenkins+gitlab+ansible-tower实现发布

前提准备&#xff1a; gitlab中上传相应的jenkinsfile文件和源码。 安装和破解ansible-tower。 安装jenkins。 大致流程&#xff1a;从gitlab中拉取文件&#xff0c;存放到windows机器上&#xff0c;使用nuget等进行打包到windows中&#xff0c;使用sshPublisher语句传输到远程…

使用QRegularExpression从样式表中提取颜色

QRegularExpression 类是 Qt 框架中用于处理正则表达式的类。 首先定义一个函数&#xff08;很多代码都来自chat gtp的生成&#xff0c;不得不说确实很棒&#xff09; from PySide6.QtCore import QRegularExpressiondef find_text_between_strings(text, start_str, end_st…

LLMs之RAG:LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs+多款embe

LLMs之RAG&#xff1a;LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs多款embedding模型m3e等多种TextSplitter分词器)、安装(镜像部署【AutoDL云平台/Docker镜像】&#xff0c;离线私有部署支持RTX3…

yum仓库及NFS共享

yum简介 yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红帽软件包管理器的缩写&#xff09;构建的软件更新机制&#xff0c;能够自动解决软件包之间的依赖关系。 yum 实现过程 先在yum服务器上创建 yum repository&#xff08;仓库&#xff09;&#xff0c;在仓…

stm32f103zet6_DAC_2_输出电压

实现效果 DAC输出的电压 同过电压表测量电压 1.DAC配置的步骤 初始化DAC时钟。配置DAC的GPIO端口。设置DAC的工作模式&#xff08;例如&#xff0c;是否使用触发功能&#xff0c;是否启用DAC中断等&#xff09;。启动DAC。 2常用的函数 函数 HAL_DAC_Start() - 开启指定…

EtherCAT开发_4_分布时钟知识点摘抄笔记1

分布时钟 (DC&#xff0c;Distributed Cl ock) 可以使所有EtherCAT设备使用相同的系统时间&#xff0c;从而控制各设备任务的同步执行。从站设备可以根据同步的系统时间产生同步信号&#xff0c;用于中断控制或触发数字量输入输出。支持分布式时钟的从站称为 DC 从站。分布时钟…

ATA-2161高压放大器用途有哪些种类

高压放大器是一种电子设备&#xff0c;其主要功能是将输入信号放大到较高的电压水平&#xff0c;同时保持信号的形状和特性。这种设备在各种应用领域中都有重要作用&#xff0c;它的种类繁多&#xff0c;根据不同的用途可以分为多种类型。 1.医学领域 在医学设备中&#xff0c;…

Sermant在异地多活场景下的实践

Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件&#xff0c;分别用于解决异地多活场景下的故障切流和保护数据一致性问题。本文将对Sermant在异地多活场景下的实践进行剖析。 一、异地多活 1.1 什么是异地多活 对于一个软件系统&#xff0c;…

极致视觉盛宴,尽在Extreme Picture Finder!

在信息爆炸的时代&#xff0c;网络图片如同繁星点点&#xff0c;为我们的生活增添无尽的色彩。然而&#xff0c;如何在浩渺的网海中快速、准确地找到心仪的图片&#xff0c;却成了许多人的难题。此刻&#xff0c;Extreme Picture Finder如同一位贴心的向导&#xff0c;引领我们…

idea修改maven项目名称及子模块名称

一、修改目录名称 shift F6修改目录&#xff0c;选择“rename module and dictionary”。![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/43efd9c6af6e43ad9656455db94b37a2.png)二、修改子项目pom的 三、修改父项目pom的 四、刷新maven项目