zoukankan      html  css  js  c++  java
  • 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+"
    ";
                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;
        }
    
    }
  • 相关阅读:
    HDU 4315 Climbing the Hill [阶梯Nim]
    POJ 1704 Georgia and Bob [阶梯Nim]
    BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏 [Nim游戏 SG函数]
    BZOJ 1299: [LLH邀请赛]巧克力棒 [组合游戏]
    浏览器缓存知识点总结
    软件测试自动化的最新趋势
    性能测试面试题(附答案
    最流行的自动化测试工具,总有一款适合你
    49种软件测试方法
    linux执行jmeter脚本解决响应数据为空
  • 原文地址:https://www.cnblogs.com/zhuanzhuruyi/p/6702160.html
Copyright © 2011-2022 走看看