Java复习41(PTA)

jmu-Java-m06 根据姓名以及电话号码查找联系人

分数 20

全屏浏览

切换布局

作者 郑如滨

单位 集美大学

该程序包含:

Person类:

属性:int id, String name, String phoneNumber,String address。

方法:

无参构造方法,有参构造方法(id, name, phoneNumber,addres),

各个参数的getter/setter方法,

toString()方法。

Utils类:

用于生成通讯录(具体代码下面已给出)

Main类的main方法:

使用Utils类创建一个通讯录personList,使用Map将personList中的person对象按name分类存储。即,key为person的name值,value为对应的person对象的List列表(说明:就是将相同name值的person对象放在一起List列表中)。

接下来就可以在该Map中根据姓名与电话号码查询联系人。查询方法如下:

  1. 输入n
  2. 输入n行的name以及phoneNumber值,以空格分开。然后根据name查找map,如果找到且在列表中的存在某个person对象的电话号码也相同,则输该person对象。如果找不到(即找不到name与电话号码均匹配的Person对象)则输出提示信息。
  3. 最后一行输出map的数量,即map.size()(该行输出在输出样例中未显示)

Utils类实现如下:

class Utils{private static final Random rd = new Random(3);private static final int number = 200000;private static List<String> getPersonName(){StringBuilder sb = new StringBuilder();List<String> names = new ArrayList<String>();for(int i=0;i<Utils.number;i++) {sb.delete(0, sb.length());for(int j=0;j<4;j++) {if(j==0) {sb.append((char)('A'+rd.nextInt(26)));}else {sb.append((char)('a'+rd.nextInt(26)));}}names.add(sb.toString());}return names;}private static List<String> getPhoneNumber(){String[] telFirst="134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");StringBuilder sb = new StringBuilder();List<String> phoneNumbers = new ArrayList<String>();for(int i=0;i<Utils.number;i++) {sb.delete(0, sb.length());for(int j=0;j<9;j++) {if(j==0) {sb.append(telFirst[rd.nextInt(telFirst.length)]);}else {sb.append(rd.nextInt(10));}}phoneNumbers.add(sb.toString());}return phoneNumbers;}private static List<String> getPersonAddress(){List<String> addresses = new ArrayList<String>();String[] roads = {"HuanDao Road","WenZeng Road","ZhongShang Road","KaiHe Road","NanHua Road","SongBai Road","BinShui Road","ShiGu Road","JiYuan Road","YinJiang Road"};StringBuilder sb = new StringBuilder();for(int i=0;i<Utils.number;i++) {sb.delete(0, sb.length());for(int j=0;j<2;j++) {if(j==1) {sb.append(roads[rd.nextInt(roads.length)]);}else {sb.append("Room "+rd.nextInt(100)+"-"+rd.nextInt(1000)+"-"+rd.nextInt(10000)+", ");}}addresses.add(sb.toString());}return addresses;}public static List<Person> getPersonList(){List<String> names = Utils.getPersonName();List<String> phones = Utils.getPhoneNumber();List<String> addresses = Utils.getPersonAddress();List<Person> persons = new ArrayList<Person>();for(int i=0;i<Utils.number;i++) {Person person = new Person();person.setId(i);person.setName(names.get(i));person.setPhoneNumber(phones.get(i));person.setAddress(addresses.get(i));persons.add(person);}return persons;}
}

输入格式:

一个正整数n

接下去的n行:

输入name以及phoneNumber

输出格式:

如果找到对象则输出该对象

未找到对象则输出"Not found!"。

输入样例:

5
Vern 15678785276
Paul 13369862612
Todd 15094198414
Mike 15079239680
Tony 13739215033

输出样例:

Not found!
Person [id=162538, name=Paul, phoneNumber=13369862612, address=Room 8-446-6866, ShiGu Road]
Person [id=139814, name=Todd, phoneNumber=15094198414, address=Room 8-856-5546, JiYuan Road]
Not found!
Person [id=184950, name=Tony, phoneNumber=13739215033, address=Room 71-896-9345, SongBai Road]
161999

代码长度限制

50 KB

时间限制

2500 ms

内存限制

256 MB

栈限制

8192 KB

import java.util.*;public class Main {public static void main(String[] args) {List<Person> personList = Utils.getPersonList();Map<String, List<Person>> personMap = new HashMap<>();// 按姓名分类存储for (Person person : personList) {personMap.computeIfAbsent(person.getName(), k -> new ArrayList<>()).add(person);}Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();scanner.nextLine(); // 读取换行符for (int i = 0; i < n; i++) {String line = scanner.nextLine();String[] parts = line.split(" ");String name = parts[0];String phoneNumber = parts[1];if (personMap.containsKey(name)) {List<Person> persons = personMap.get(name);boolean found = false;for (Person person : persons) {if (person.getPhoneNumber().equals(phoneNumber)) {System.out.println(person);found = true;break;}}if (!found) {System.out.println("Not found!");}} else {System.out.println("Not found!");}}System.out.println(personMap.size()); // 输出map的数量scanner.close();}
}class Person {private int id;private String name;private String phoneNumber;private String address;public Person() {}public Person(int id, String name, String phoneNumber, String address) {this.id = id;this.name = name;this.phoneNumber = phoneNumber;this.address = address;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", phoneNumber=" + phoneNumber + ", address=" + address + "]";}
}class Utils {private static final Random rd = new Random(3);private static final int number = 200000;private static List<String> getPersonName() {StringBuilder sb = new StringBuilder();List<String> names = new ArrayList<String>();for (int i = 0; i < Utils.number; i++) {sb.delete(0, sb.length());for (int j = 0; j < 4; j++) {if (j == 0) {sb.append((char) ('A' + rd.nextInt(26)));} else {sb.append((char) ('a' + rd.nextInt(26)));}}names.add(sb.toString());}return names;}private static List<String> getPhoneNumber() {String[] telFirst = "134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");StringBuilder sb = new StringBuilder();List<String> phoneNumbers = new ArrayList<String>();for (int i = 0; i < Utils.number; i++) {sb.delete(0, sb.length());for (int j = 0; j < 9; j++) {if (j == 0) {sb.append(telFirst[rd.nextInt(telFirst.length)]);} else {sb.append(rd.nextInt(10));}}phoneNumbers.add(sb.toString());}return phoneNumbers;}private static List<String> getPersonAddress() {List<String> addresses = new ArrayList<String>();String[] roads = {"HuanDao Road", "WenZeng Road", "ZhongShang Road", "KaiHe Road", "NanHua Road", "SongBai Road", "BinShui Road", "ShiGu Road", "JiYuan Road", "YinJiang Road"};StringBuilder sb = new StringBuilder();for (int i = 0; i < Utils.number; i++) {sb.delete(0, sb.length());for (int j = 0; j < 2; j++) {if (j == 1) {sb.append(roads[rd.nextInt(roads.length)]);} else {sb.append("Room " + rd.nextInt(100) + "-" + rd.nextInt(1000) + "-" + rd.nextInt(10000) + ", ");}}addresses.add(sb.toString());}return addresses;}public static List<Person> getPersonList() {List<String> names = Utils.getPersonName();List<String> phones = Utils.getPhoneNumber();List<String> addresses = Utils.getPersonAddress();List<Person> persons = new ArrayList<Person>();for (int i = 0; i < Utils.number; i++) {Person person = new Person();person.setId(i);person.setName(names.get(i));person.setPhoneNumber(phones.get(i));person.setAddress(addresses.get(i));persons.add(person);}return persons;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

项目笔记:在stm32f103c8上用DMA控制串口收发

一、传统串口收发与引入DMA控制的区别 传统串口收发每一步都经过CPU处理和控制&#xff0c;当总线数据量大且频繁时CPU要反复地进入中断中处理&#xff0c;而引入DMA的差异就在于DMA会自动处理这个过程&#xff0c;并不需要占用CPU。 二、在不同芯片上所包含的DMA数量不同 对于…

基于SpringBoot的“原创歌曲分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“原创歌曲分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 平台功能结构图 平台首页界面图 用户注册界面…

CLion配置QT开发环境

一、将qmake工程转为cmake工程&#xff08;方法一&#xff1a;用工具转换并做适当修改&#xff09; 1、工具链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1grW2QY3sW8X2JaHWM_ePPw 提取码&#xff1a;7at4 工具源码:https://github.com/milahu/qmake2cmake 2、执行…

【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

力扣 LeetCode 142. 环形链表II(Day2:链表)

解题思路&#xff1a; 使用set判断是否重复添加&#xff0c;如果set加入不进去证明之前到达过该节点&#xff0c;有环 public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while (cur …

基于Ubuntu2410脚本搭建OpenStack-D版

openstack 初始化环境安装数据库、memcahe、rabbitmq等服务安装keystone服务安装glance服务安装placement服务安装nova服务安装neutron服务安装horizon服务启动云主机 本次实验使用单节点搭建&#xff0c;Ubuntu2410系统&#xff1a;搭建openstack-D版&#xff0c;采用ovs网络组…

Vue 3 在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 引言 Vue 3 概述 定义与原理 发展历…

QT鼠标事件

QT鼠标事件 1.概述 这篇文章介绍如何使用事件和获取事件的信号 2.创建项目 创建一个widget类型项目&#xff0c;在widget.ui文件中添加一个label控件 然后在项目名称上右键选择Add new... 添加文件&#xff0c;选择 C Class 自定义类名Mylabel&#xff0c;选择基类Base …

VUE tab栏选中状态与滚动项展示状态对应

实现效果 实现思路 记录滚动容器、滚动项的ref点击某一项tab时&#xff0c;滚动对应项到界面上监听滚动容器滚动&#xff0c;计算展示在界面的滚动项&#xff0c;选中对应tab项 关键代码 html <!-- tab栏 --> <a-tabs id"template-tab" v-model:activeK…

手动安装Ubuntu系统中的network-manager包(其它包同理)

自己手闲把系统中的network-manager包给删了&#xff0c;导致的结果就是Ubuntu系统彻底没有网络。结果再装network-manager时&#xff0c;没有网络根本装不了&#xff0c;网上的方法都试了也没用&#xff0c;然后就自己源码装&#xff0c;这篇文章就是记录一下怎么手动下载包然…

Qt初识简单使用Qt

使用C代码实现hello world 之前介绍过用图形化界面的方式创建hello world&#xff0c;这里我们使用C代码的方式再来实现一次hello world。 如上&#xff0c;首先要先包含一个头文件。 在QT这里&#xff0c;每一个类都有一个对应的同名头文件。比如这里我就包含了 <QLabel&…

自定义集成ESXI网卡驱动

需要的软件&#xff1a; ESXi-Customizer-v2.7.2 集成工具&#xff0c;可以将vib网卡驱动加载到镜像中&#xff0c;不用敲命令了 VIB 网卡驱动 根据自己网卡的型号自行下载 ESXi-Customizer-v2.7.2 软件地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1v5aI9T-Tl5…

Golang | Leetcode Golang题解之第559题N叉树的最大深度

题目&#xff1a; 题解&#xff1a; func maxDepth(root *Node) (ans int) {if root nil {return}queue : []*Node{root}for len(queue) > 0 {q : queuequeue nilfor _, node : range q {queue append(queue, node.Children...)}ans}return }

【JAVA基础】JVM双亲委派

JVM双亲委派 双亲委派机制为什么进行双亲委派&#xff1f;为什么要设计这种机制&#xff1f; 双亲委派机制 双亲委派是一个孩子向父亲方向&#xff0c;然后父亲向孩子方向的双亲委派过程总结&#xff1a;自下&#xff08;从 App 开始&#xff09;而上进行检查&#xff0c;自上…

Qt生成coredump文件(支持arm和x86架构)

简介&#xff1a; coredump一般都在执行文件崩溃时自动生成的&#xff0c;用来定位造成程序崩溃的原因。 ubuntu下的设置coredump步骤&#xff08;linux的x86架构&#xff09; 1、正常情况下coredump生成路径需要在root权限下才能设置生效&#xff0c;所以我们需要进入root模式…

探秘Sketch及其替代者:设计软件精选指南

Sketch是一款适用于macOS系统的专业矢量绘图应用软件&#xff0c;由荷兰公司Sketch B.V. 开发&#xff0c;于2010年9月7日首次发布&#xff0c;并在2012年获得苹果设计大奖。以下是对Sketch软件的具体介绍。 1、Sketch软件是什么 功能特点&#xff1a; 矢量编辑功能强大&…

初识网络原理

1.网络互联 网络互联就是将多台计算机连接在一起&#xff0c;完成数据共享。 数据共享本质就是网络数据传输&#xff0c;即计算机之间通过网络来传输数据&#xff0c;也称为网络通信。 根据网络互联的规模不同&#xff0c;可以划分为局域网和广域网。 1.1 局域网 局域网&am…

文章管理系统微信小程序ssm+论文源码调试讲解

第2章 关键技术简介 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验[12]。 小程序的主要开发语言是JavaScript&#xff…

Python OpenCV孤立点检测

孤立点检测 在Python中使用OpenCV进行孤立点&#xff08;异常点&#xff09;检测&#xff0c;可以通过应用统计分析或者使用OpenCV的findContours和convexHull函数来识别。以下是一个简单的例子&#xff0c;使用OpenCV的findContours和convexHull来识别并绘制孤立点。 孤立点…

leetcode-15-三数之和

题解&#xff1a; 代码&#xff1a; 参考&#xff1a;leetcode-16-最接近的三数之和