7-3 jmu-Java-05集合(泛型)-10-GeneralStack(Java for PTA)

以前定义的IntegerStack接口,只能用于存放Integer类型的数据。然而对于栈来说,不管内部存放的是什么类型的数据,基本操作与元素的具体类型无关。

1. 编写一个通用的GeneralStack接口,接口中的操作对任何引用类型的数据都适用。

一旦定义完毕,只能存放一种类型的数据,比如只能存放String或只能存放Integer。GeneralStack接口方法如下:

push(item);            //如item为null,则不入栈直接返回null。
pop();                 //出栈,如为栈为空,则返回null。
peek();                //获得栈顶元素,如为空,则返回null.
public boolean empty();//如为空返回true
public int size();     //返回栈中元素数量

2.定义GeneralStack的实现类ArrayListGeneralStack

内部使用ArrayList对象存储,属性名为list

方法:
public String toString()//该方法的代码为return list.toString();

提示:

  1. 不用使用top指针。
  2. 直接复用ArrayList中已有的方法。
  3. pop时应将相应的元素从ArrayList中移除。
  4. 代码中不要出现类型不安全的强制转换

3.定义Car对象

属性:

private int id;
private String name;

方法:Eclipse自动生成setter/getter,toString方法。

4.main方法说明

  1. 输入选项,有quit, Integer, Double, Car4个选项。如果输入quit,则直接退出。否则,输入整数m与n。m代表入栈个数,n代表出栈个数。然后声明栈变量stack
  2. 输入Integer,打印Integer Test。建立可以存放Integer类型的ArrayListGeneralStack。入栈m次,出栈n次。打印栈的toString方法。最后将栈中剩余元素出栈并累加输出。
  3. 输入Double ,打印Double Test。剩下的与输入Integer一样。
  4. 输入Car,打印Car Test。其他操作与Integer、Double基本一样。只不过最后将栈中元素出栈,并将其name依次输出。

2、3、4步骤做完都要使用代码System.out.println(stack.getClass().getInterfaces()[0]);打印标识信息

特别注意:如果栈为空的时候继续出栈,则返回null

输入样例

Integer
5
2
1 2 3 4 5
Double
5
3
1.1 2.0 4.9 5.7 7.2
Car
3
2
1 Ford
2 Cherry
3 BYD
quit

输出样例

Integer Test
push:1
push:2
push:3
push:4
push:5
pop:5
pop:4
[1, 2, 3]
sum=6
interface GeneralStack
Double Test
push:1.1
push:2.0
push:4.9
push:5.7
push:7.2
pop:7.2
pop:5.7
pop:4.9
[1.1, 2.0]
sum=3.1
interface GeneralStack
Car Test
push:Car [id=1, name=Ford]
push:Car [id=2, name=Cherry]
push:Car [id=3, name=BYD]
pop:Car [id=3, name=BYD]
pop:Car [id=2, name=Cherry]
[Car [id=1, name=Ford]]
Ford
interface GeneralStack

import java.util.*;interface GeneralStack{public Object push(Object item);public Object pop();public Object peek();public boolean empty();public int size();
}class ArrayListGeneralStack implements GeneralStack{ArrayList list = new ArrayList();//重写接口的方法//Object 是 Java 中的一个预定义类,它是所有类的父类。//使用 Object 类作为参数类型意味着这个方法可以接受任何类型的对象作为输入。@Override//如item为null,则不入栈直接返回null。public Object push(Object item){if(item==null){return null;}else{list.add(item);return item;//入栈的同时作为输出结果}}@Override//出栈,如为栈为空,则返回null。public Object pop(){if(list.size()==0){return null;}else{return list.remove(list.size()-1);}}@Override//获得栈顶元素,如为空,则返回null.public Object peek(){if(list.size()==0){return null;}else{return list.get(list.size()-1);}}@Override//如为空返回truepublic boolean empty(){if(list.size()==0){return true;}else{return false;}}@Override//返回栈中元素数量public int size(){return list.size();}@Overridepublic String toString(){return list.toString();}
}class Car{private int id;private String name;public int getId(){return id;}public String getName(){return name;}public void setName(String name){this.name=name;}public void setId(int id){this.id=id;}Car(int id,String name){this.id=id;this.name=name;}public String toString(){return "Car [id="+id+", name="+name+"]";}
}public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);while (true){String s=sc.nextLine();if (s.equals("Double")){System.out.println("Double Test");int count=sc.nextInt();int pop_time=sc.nextInt();//出栈次数ArrayListGeneralStack arrayListGeneralStack = new ArrayListGeneralStack();for (int i=0;i<count;i++){System.out.println("push:"+arrayListGeneralStack.push(sc.nextDouble()));}for (int i=0;i<pop_time;i++){System.out.println("pop:"+arrayListGeneralStack.pop());}System.out.println(arrayListGeneralStack.toString());double sum=0;int size=arrayListGeneralStack.size();for (int i=0;i<size;i++){sum+=(double)arrayListGeneralStack.pop();}System.out.println("sum="+sum);System.out.println("interface GeneralStack");}else if (s.equals("Integer")){System.out.println("Integer Test");int count=sc.nextInt();int pop_time=sc.nextInt();ArrayListGeneralStack arrayListGeneralStack = new ArrayListGeneralStack();for (int i=0;i<count;i++){System.out.println("push:"+arrayListGeneralStack.push(sc.nextInt()));}for (int i=0;i<pop_time;i++){System.out.println("pop:"+arrayListGeneralStack.pop());}System.out.println(arrayListGeneralStack.toString());int sum=0;int size=arrayListGeneralStack.size();for (int i=0;i<size;i++){sum+=(int)arrayListGeneralStack.pop();}System.out.println("sum="+sum);System.out.println("interface GeneralStack");}else if (s.equals("Car")){System.out.println("Car Test");int count=sc.nextInt();int pop_time=sc.nextInt();ArrayListGeneralStack arrayListGeneralStack = new ArrayListGeneralStack();for (int i=0;i<count;i++){int id=sc.nextInt();String name=sc.next();Car car = new Car(id,name);System.out.println("push:"+arrayListGeneralStack.push(car));}for (int i=0;i<pop_time;i++){System.out.println("pop:"+arrayListGeneralStack.pop());}System.out.println(arrayListGeneralStack.toString());if (arrayListGeneralStack.size()>0){int size=arrayListGeneralStack.size();for (int i=0;i<size;i++){Car car=(Car) arrayListGeneralStack.pop();System.out.println(car.getName());}}System.out.println("interface GeneralStack");}else if (s.equals("quit")){break;}}}
}

 

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

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

相关文章

Docker使用5-Use bind mounts

写在前面 主题是Use bind mounts&#xff0c;这里是链接。本文主要学习持久化数据的另一种方式。 使用mount持久化数据 前文使用Volume持久化数据&#xff0c;这里使用另一种方式Mount持久化数据&#xff0c;就是把主机中的路径映射到容器内的路径。下图是两种方式的主要区别…

【docker】修改docker的数据目录

背景 主节点是分配了较少内存和存储的低配机器&#xff0c;因为我们系统的rancher是用docker镜像启动的&#xff0c;而rancher和docker的默认目录都放在/var/lib下面&#xff0c;而这个/var目录目前只分配10G的存储&#xff0c;导致节点存储报警。因此想修改docker的数据目录&…

idea添加外部jar包

在日常开发中在lib包的里面添加了外部的jar&#xff0c;如何将外部的包添加到java类库中&#xff0c;这样项目就可以引用相应的jar包&#xff0c;操作如下&#xff1a; 1.先将需要的jar复制到lib包如下&#xff0c;如下截图&#xff0c;图标前面没有箭头&#xff0c;表示还未添…

正则化实战( Lasso 套索回归,Ridge 岭回归)

Lasso 套索回归 导入包 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SGDRegressor, LinearRegression原方程的计算结果 # 1. 创建数据集X&#xff0c;y X 2 * np.random.rand(100, 20) w np.random.rand(20, 1) b np.r…

C# 实时存储16进制数据,写入文件格式为Raw

1.示例代码 private void button1_Click(object sender, EventArgs e){byte[] data { 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 }; //模拟要写入的数组List<byte[]> listBytes new List<byte[]>();listBytes.Add(data); //数组转集合RecData(listBytes);…

Electron无边框自定义窗口拖动

解决方案 <header class"absolute" style"left:0px;top:0px;width:100%;height:48px;background-color:red;padding:0px;margin:0px;"><div class"absolute" style"left:0px;top:0px;width:100%;height:100%;-webkit-app-region:d…

租赁系统|租赁小程序开发|北京租赁系统提升行业发展

租赁小程序定制功能是为了满足特定租赁服务的个性化需求而开发的一套功能模块。通过定制化开发&#xff0c;我们能够根据您的业务模式和需求&#xff0c;量身打造出适合您的租赁小程序。无论您是汽车租赁、房屋租赁、设备租赁或其他租赁服务&#xff0c;我们都能够为您提供定制…

财务知识之存货、固定资产、无形资产

存货、固定资产、无形资产在会计中常被称作“资产三兄弟”&#xff0c;原因是他们有很多相似的地方。 一、定义 名称准则定义存货存货&#xff0c;是指企业在日常活动中持有以备出售的产成品或商品、处在生产过程中的在产品、在生产过程或提供劳务过程中耗用的材料和物料等。…

phy 业务测试场景总结

1,光模块 模块类型 (1) 100BASE-X (2) 1000BASE-FX 千兆模块应用场景: a,应用 100BASE-X,1百兆组网使用的光模块。 b,应用 1000BASE-FX,千兆光模块降速率使用和不降速率的使用。 2,电模块 (1) 100M (2) 10/100M自适应 (3) 1000M(1.25G) (4) 10/100/1000M自适应

css的filter全属性介绍

原图&#xff1a; 模糊&#xff08;blur&#xff09; 单位可为px或rem&#xff0c;值越大&#xff0c;越模糊 filter:blur(3px) filter:blur(0.3rem) 亮度(brightness) 值可为数字或百分数&#xff0c;小于1时&#xff0c;亮度更暗&#xff1b;等于1时&#xff0c;无变化&am…

PyQt QThread 简单代码

问题 每次运行到耗时方法时界面就卡死&#xff0c;无响应&#xff0c;花费了很长事件才把问题解决了&#xff0c;记录一下 原因分析 程序在主线程中执行&#xff0c;当主程序中有一个事件比较耗时时&#xff0c;主程序就会等耗时事件处理完才会进行下一步&#xff0c;此时界…

Verilog 字符串

文章目录 字符串简介字符串声明字符串操作输出字符画 字符串简介 一个字符串是由双引号"括起来并包含在一行中的字符序列。 在表达式和赋值语句中&#xff0c;用作操作数的字符串被视为由8bit ASCII码值表示的无符号整数常量。 字符串声明 字符串变量是wire/reg类型的变…

部署LVS的NAT模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

gitee(ssh)同步本地

一、什么是码云 gitee Git的”廉价平替” > 服务器在国内&#xff0c;运行不费劲 在国内也形成了一定的规模 git上的一些项目插件等在码云上也可以找得到 二、创建仓库 三、删除仓库 四、仓库与本地同步 > 建立公钥 五、把仓库同步到本地 六、在本地仓库中创建vue项目…

C++设计模式之——命令模式

命令模式 概念创建步骤示例示例一代码实现运行结果 示例二代码实现运行结果 示例三示例代码运行结果 示例四代码实现运行结果 应用场景 概念 命令模式是一种行为型设计模式&#xff0c;它允许将请求封装为一个对象&#xff0c;从而使得可以参数化客户端请求、将请求排队或者记…

docker干净编译环境搭建

docker干净编译环境搭建 一、docker安装1、环境2、安装 二、编译环境三、Dockerfile环境1、安装基本环境版本&#xff1a;2、在有镜像zyhdell/ubuntu:v1下的创建&#xff1a; 四、创建work容器&#xff1a; 一、docker安装 1、环境 操作系统版本&#xff1a;ubuntu 22.04.3 de…

libp2p 快速开始

文章目录 第一部分&#xff1a;libp2p 快速入门一、什么是libp2plibp2p 发展历程libp2p的特性p2p 网络和我们熟悉的 client/server 网络的区别&#xff1a; 二、Libp2p的实现目标三、Libp2p的用途四、运行 Libp2p 协议流程libp2p 分为三层libp2p 还有一个局域网节点发现协议 mD…

原生JS实现组件切换(不刷新页面)

这是通过原生Es6实现的组件切换&#xff0c;代码很简单&#xff0c;原理和各种框架原理大致相同。 创建文件 ├── component&#xff1a;存放组件 │ ├── home1.js&#xff1a;组件1 │ ├── home2.js&#xff1a;组件2 ├── index.html ├── index.js初始化ht…

LLaMA系列模型

1.LLama 1.1 简介 Open and Efficient Foundation Language Models (Open但没完全Open的LLaMA) 2023年2月&#xff0c;Meta&#xff08;原Facebook&#xff09;推出了LLaMA大模型&#xff0c;使用了1.4T token进行训练&#xff0c;虽然最大模型只有65B&#xff0c;但在相关评…

[23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians

[paper | proj] 给定FLAME&#xff0c;基于每个三角面片中心初始化一个3D Gaussian&#xff08;3DGS&#xff09;&#xff1b;当FLAME mesh被驱动时&#xff0c;3DGS根据它的父亲三角面片&#xff0c;做平移、旋转和缩放变化&#xff1b;3DGS可以视作mesh上的辐射场&#xff1…