大家都很忙 java版解答.. 欢迎各种拍砖,求交流

具体题目关注我的微博主页 啦啦啦,求关注.

http://weibo.com/2625628052/profile?topnav=1&wvr=5#1347092750648

里面有我转发的李开复的问题..

错了.........

2个人同时关注3个项目的时候出现了一次等待..

顺便求关注:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

public class Main {
    public static List<Project> allProjects = new ArrayList<Project>();
    public static List<Student> allStudents = new ArrayList<Student>();
    public static HashMap<String, Project> allProHash = new HashMap<String, Project>();
    public static HashMap<String, Student> allStuHash = new HashMap<String, Student>();

    public static void main(String[] args) {
        File input = new File("/home/jushang/iw.in");//测试文件. 随便写...
        FileInputStream fis;
        try {
            fis = new FileInputStream(input);
            InputStreamReader reader = new InputStreamReader(fis);
            BufferedReader reader2 = new BufferedReader(reader);
            String line = reader2.readLine(); 
            while (line != null && line.length() > 0) {  //读取所有数据,顺便创建实例
                String[] values = line.split(" ");
                if (values.length != 2) {
                    System.out.println(line);
                    System.out.println("read Date Error!!");
                    break;
                }
                Project p;
                Student s;
                if (!allProHash.containsKey(values[1])) {
                    p = new Project(values[1]);
                    allProHash.put(values[1], p);
                    allProjects.add(p);
                } else {
                    p = allProHash.get(values[1]);
                }
                if (allStuHash.containsKey(values[0])) {
                    s = allStuHash.get(values[0]);
                } else {
                    s = new Student(values[0]);
                    allStuHash.put(values[0], s);
                    allStudents.add(s);
                }
                s.addProject(p);
                p.addStudent(s);

                line = reader2.readLine();
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        boolean isContinue = true;
        while (isContinue) {  //开始按周优先级排序.
            sort();
            for (Student s : allStudents) {
                s.tick();
            }
            isContinue = false;
            for (Project p : allProjects) {
                p.tick();
                if (p.isStartMianshi() && p.mianshi()) { //已经开始面试的人优先挑选面试者
                    isContinue = true;
                    continue;
                }

            }
            for (Project p : allProjects) {
                if (!p.isStartMianshi() && p.mianshi()) {
                    isContinue = true;
                }
            }
        }
        sortByName();
        for (Project p : allProjects) {
            p.printResult(); //打印结果
        }

    }

    public static void sort() { //根据还没有面试人的多少排序,少的排在前面.

        java.util.Collections.sort(allProjects, new Comparator<Project>() {
            @Override
            public int compare(Project object1, Project object2) {
                // TODO Auto-generated method stub
                if (object1.getUnInterNumber() > object2.getUnInterNumber()) {
                    return 1;
                } else if (object1.getUnInterNumber() < object2.getUnInterNumber()) {
                    return -1;
                }
                return 0;
            }
        });

    }

    public static void sortByName() {

        java.util.Collections.sort(allProjects, new Comparator<Project>() {
            @Override
            public int compare(Project object1, Project object2) {
                // TODO Auto-generated method stub
                if (Integer.valueOf(object1.getName()) > Integer.valueOf(object2.getName())) {
                    return 1;
                } else if (Integer.valueOf(object1.getName()) < Integer.valueOf(object2.getName())) {
                    return -1;
                }
                return 0;
            }
        });

    }

}

学生类:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Student {
    private List<Project> proList = new ArrayList<Project>();
    private HashMap<Project, String> proHash = new HashMap<Project, String>();
    private List<Project> needInterViewproList = new ArrayList<Project>();
    private String name;
    private int Time = 0;
    private boolean isStartMianshi = false;
    private boolean lock = false;
    private int freeTick = 0;

    public List<Project> interViewProList = new ArrayList<Project>();

    public Student(String name) {
        this.name = name;
    }

    public boolean addProject(Project p) {
        if (!proHash.containsKey(p)) {
            proList.add(p);
            needInterViewproList.add(p);
            proHash.put(p, p.getName());
            return true;
        }
        return false;
    }

    public boolean mianshi(Project p) {

        if (proHash.containsKey(p)) {
            lock = true;
            freeTick--;
            needInterViewproList.remove(p);
            interViewProList.add(p);

            if (!isStartMianshi) {
                Time = 1;
                isStartMianshi = true;
            }

            if (needInterViewproList.size() == 0) {
                isStartMianshi = false;
            }

            return true;
        }
        return false;
    }

    public void tick() {
        lock = false;
        if (isStartMianshi) {
            freeTick++;
            Time++;
        }
    }

    public boolean isLock() {
        return lock;
    }

    public String getName() {
        return name;
    }

    public boolean isStartMianshi() {
        return isStartMianshi;
    }
    
    public int getUnviewNumber(){
        
        return needInterViewproList.size();
    }
    
    
}

项目的类:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

public class Project {
    private List<Student> StudentList = new ArrayList<Student>();
    private HashMap<Student, String> StudentHash = new HashMap<Student, String>();
    private List<Student> interedStrudent = new ArrayList<Student>();
    private String name;
    private int Time = 0;
    private boolean isStartMianshi = false;
    private String result = "";

    public Project(String name) {
        this.name = name;
    }

    public boolean addStudent(Student s) {
        if (!StudentHash.containsKey(s)) {
            StudentHash.put(s, s.getName());
            StudentList.add(s);
        }

        return false;
    }

    public boolean mianshi() {
        sort();
        String a = "0 ";
        for (Student s : StudentList) {

            if (s.isStartMianshi() && !s.isLock()) {
                if (!s.mianshi(this)) {
                    System.out.print("error!!!!!!!!" + s.getName());
                } else {
                    StudentList.remove(s);
                    interedStrudent.add(s);
                    a = s.getName();
                    result += a+" ";
                    if (!isStartMianshi) {
                        isStartMianshi = true;
                        Time = 1;
                    }
                    if (StudentList.size() == 0) {
                        isStartMianshi = false;
                    }
                    return true;
                }
            }
       
        }
        
        for(Student s:StudentList){
            if (!s.isLock()) {
                if (!s.mianshi(this)) {

                    System.out.print("error!!!!!!!!" + s.getName());
                } else {
                    StudentList.remove(s);
                    interedStrudent.add(s);
                    a = s.getName();
                    result += a +" ";
                    if (!isStartMianshi) {
                        isStartMianshi = true;
                        Time = 1;
                    }

                    if (StudentList.size() == 0) {
                        isStartMianshi = false;
                    }

                    return true;
                }
            }
        }
        result += a;
        if (StudentList.size() == 0) {
            return false;
        } else {
            return true;
        }

    }

    public void tick() {
        if (isStartMianshi) {
            Time++;
        }
    }

    public String getName() {
        return name;
    }

    public int getUnInterNumber() {
        return StudentList.size();
    }

    private void sort() {
        java.util.Collections.sort(StudentList, new Comparator<Student>() {
            @Override
            public int compare(Student object1, Student object2) {
                // TODO Auto-generated method stub
                if (object1.getUnviewNumber() > object2.getUnviewNumber()) {
                    return -1;
                } else if (object1.getUnviewNumber() < object2.getUnviewNumber()) {
                    return 1;
                }
                return 0;
            }
        });
    }

    public boolean isStartMianshi(){
        return isStartMianshi;
    }
    
    
    public void printResult() {
//        String s = "";
//        for (Student name : interedStrudent) {
//            s += name.getName() + " ";
//        }
//        s += "\n";
        System.out.println(name+":   "+result);
    }

}

  

创新工厂竟然要同时发简历过去..., 就贴在这里,顺便求讨论,求正确答案..

原文地址:https://www.cnblogs.com/zhenbeiju/p/2676772.html