UVA 814 The Letter Carrier's Rounds(JAVA基础map)
题解:就是按照题目模拟就好
但是这个题目让我发现了我Java里面许多问题
具体看代码,但是还是分为这几个方面
属性的作用域问题,缓冲区问题,map与list映射的问题,输出多个空格不一定是/t,反转思想代码优化
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set; public class Main{ // Map为接口不能实例化,所以需要实例化HashMap
static Map<String, List<String>> map = new HashMap<String, List<String>>();
// 多个类要用到 scanner,不能再每个类里面自己建立,否则缓冲区会出现问题
static Scanner sc = new Scanner(System.in); public static void main(String[] args) {
while (sc.hasNext()) {
map.clear();
while (true) {
String type = sc.next();
if ("*".equals(type)) {
while (!"*".equals(Solve()));
break;
}
String email, name;
int num;
email = sc.next();
num = sc.nextInt();
// 每次重构list,否则会清空之前还是map里面的值
List<String> list = new ArrayList<String>();
while (num > 0) {
name = sc.next();
//这儿直接存储邮件地址而不是只存name,后面就可以直接比较了
list.add(name+"@"+email);
--num;
}
map.put(email, list);
}
}
} private static String Solve() {
String sender;
String[] recipient = new String[100000];
sender = sc.next();
if ("*".equals(sender))
return sender; Set<String> set=new HashSet<String>();
recipient[0] = sc.next();
set.add(recipient[0]);
int coun = 0;
while (!"*".equals(recipient[coun])) {
recipient[++coun] = sc.next();
if(set.contains(recipient[coun])){
coun--;
}else{
set.add(recipient[coun]);
}
} //去除回车
sc.nextLine();
String data = "";
String temp=sc.nextLine();
while (!"*".equals(temp)) {
//将所有行都加入data中
data=data+" "+temp+"\n";
temp=sc.nextLine();
} int[] vis = new int[100000];
for (int i=0;i<vis.length;++i)
vis[i]=0; for (int i = 0; i < coun; ++i) { if (vis[i] == 0) {
String senderName = Las(sender);
String recipientName = Las(recipient[i]);
System.out.println("Connection between " + senderName + " and " + recipientName);
System.out.println(" HELO " + senderName);
System.out.println(" 250");
System.out.println(" MAIL FROM:<" + sender + ">");
System.out.println(" 250");
int flag = 0;
for (int j = i; j < coun; ++j) {
if (vis[j] == 0 && recipientName!=null&& recipientName.length()!=0&& recipientName.equals(Las(recipient[j]))) {
vis[j] = 1;
System.out.println(" RCPT TO:<" + recipient[j] + ">");
if (Check(map.get(recipientName), recipient[j])) {
System.out.println(" 250");
flag = 1;
} else {
System.out.println(" 550");
}
}
}
if (flag == 1) {
System.out.println(" DATA");
System.out.println(" 354");
System.out.print(data);
System.out.println(" .");
System.out.println(" 250");
} System.out.println(" QUIT");
System.out.println(" 221");
}
}
return null;
} private static boolean Check(List list, String com) { if (list == null || list.isEmpty())
return false;
for (Object i : list) {
if (com!=null&& com.length()>0&&com.equals((String) i)) {
return true;
}
}
return false;
} private static String Las(String string) {
int i;
for (i = 0; i < string.length(); ++i) {
char temp = string.charAt(i);
if (temp == '@') {
++i;
break;
}
}
String ans = "";
for (; i < string.length(); ++i) {
ans += string.charAt(i);
}
return ans;
} }
UVA 814 The Letter Carrier's Rounds(JAVA基础map)的更多相关文章
- UVA 814 The Letter Carrier's Rounds
大致翻译: 对于电子邮件应用程序,您需要描述发生在成对mta之间的基于smtp的通信.发送方 的用户代理向发送消息传输代理(MTA)提供格式化的消息.发送MTA使用SimpleMail 传输协议(SM ...
- java基础-Map集合
java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...
- Java 基础 Map 练习题
第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...
- java基础-Map的静态初始化以及Map的遍历等.....................
1.map的静态初始化,以及map遍历的几种方法: package com.cy.test; import java.util.HashMap; import java.util.Iterator; ...
- java基础-Map
简介 Map是一种接口,实现类有 hashMap SortedMap是继承自Map的接口,实现类为TreeMap,在内部会对Key进行排序 遍历Map 使用for each循环遍历Map实例的keyS ...
- The Letter Carrier's Rounds(摘)
Description For an electronic mail application you are to describe the SMTP-based communication that ...
- java基础——Map集合
Map以键值对的形式存储数据,其中Map.entry,是Map的内部类,它用来描述Map中的键值对.Map是一个接口,HashMap是他的一个实现类 Map中有几个重要的方法: get(Object ...
- Java基础 - Map接口的实现类 : HashedMap / LinkedHashMap /TreeMap 的构造/修改/遍历/ 集合视图方法/双向迭代输出
Map笔记: import java.util.*; /**一:Collection接口的 * Map接口: HashMap(主要实现类) : HashedMap / LinkedHashMap /T ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
随机推荐
- AttributeError: 'NoneType' object has no attribute 'append'
大多数是这个原因: gongzi = [] for p in [1,2,3]: gongzi = gongzi.append(p) #改为如下即可 gongzi = [] for p in [1,2, ...
- LInux中ThreadInfo中的preempt_count字段
最近看各种上下文,发现和ThreadInfo中的preemption字段密切,于是便调查了下. 看下Linux源码中的注释: /* * We put the hardirq and softirq c ...
- mysql删除重复数据,保留最新的那一条
因为数据库没键外键,在关联查询的时候,会碰到查询条数多余数据库实际条数,这因为关联字段在表中有重复值而导致的. 解决方案: 1.数据库脚本删除重复数据,保留最新的一条 2.对关联字段增加唯一约束 例如 ...
- MyEclipse如何调试
我们在MyEclipse中jav添加断点,运行debug as-->open debug Dialog,然后在对话框中选类后--> Run在debug视图下.2.F5键与F6键均为单步调试 ...
- 网站实时信息采集和统计graphite
Graphite 是一个Python写的web应用,采用django框架,Graphite用来进行收集服务器所有的即时状态,用户请求信息,Memcached命中率,RabbitMQ消息服务器的状态,U ...
- vueRouter点击打开新页签
一.vue 路由使用 vue是单页面SPA,一般我们使用vue-router 设定路由进行页面跳转的时候,都是直接覆盖当前页面.比如,在a页面中有如下超链接 <router-link to=&q ...
- Https之秘钥交换过程分析
一.概念回顾 A <------M------> B场景:A.B两个人之间通讯,A传输信息M给B,假定是在不安全的通路上传输. 1.明文传输 被中间人C拦截下来,可以随意篡改A发送给B的消 ...
- Mybatis中的#与$的区别
一.对比场景 场景:数据库分表时,需要将分表的表序号传入的sql中. SpringBoot中使用注解如下: @Insert("insert into collect_#{tblNum}(id ...
- HackerRank - greedy-florist 【贪心】
HackerRank - greedy-florist [贪心] 题意 有N个人 要去买K朵花.老板为了最大化新顾客的数量.就压榨回头客.每一朵花都有一个基本价格.一个顾客买下这朵花的价格是他来这里买 ...
- Extjs 正则表达式 常用的
extjs正则表达式验证 2011年10月10日 10:36:05 阅读数:7305 在EXT中使用正则表达式验证的方法:fieldLabel : '员工号',name : 'employee.e ...