您的位置:首页 > 编程语言 > Java开发

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

2012-09-08 16:29 351 查看
具体题目关注我的微博主页 啦啦啦,求关注.

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);
}

}


  

创新工厂竟然要同时发简历过去..., 就贴在这里,顺便求讨论,求正确答案..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: