有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java程序中测试未授权的隐藏测试(代码战)

以下是作业:

我有4个输入数组,指示不同员工的信息

String[] names, boolean[] statuses, int[] projects, int[] tasks

它们将作为参数传递给我必须编写的方法。 输出应该是符合要求的员工的姓名

要求是:

  • 每个数组的第i个元素属于第i个雇员。雇员人数各不相同
  • 他/她的状态必须为false,该员工才能考虑下一个条件
  • 例如,如果AB状态为假,则将选择任务数较少的一个,或任务数与另一个任务数相等但项目数较少的一个。对所有员工都这样做
  • 返回此员工的姓名(字符串)

阵列的示例可能类似于:

names = ["John", "Martin"], statuses = [false, false],
projects = [2, 1] and tasks = [16, 5],

输出应为:

smartAssigning(names, statuses, projects, tasks) = "Martin".

这是我的代码:(这只是方法)

String smartAssigning(String[] names, boolean[] statuses, int[] projects, int[] tasks) {
String name = null;
int task = tasks[0];
int order = 0;
int mainOrder = 0;
int project;
int[] list = new int[names.length];
for (int i = 1; i < tasks.length; i++) {
    if (tasks[i] < task && statuses[i] == false) {
        task = tasks[i];
    }
}
for (int i = 0; i < tasks.length; i++) {
    if (task == tasks[i]) {
        list[order] = i;
        order++;
    }
}
project = list[0];
if (order > 1) {
    for (int i = 1; i < order; i++) {
    if (project > projects[list[i]]) {
        project = projects[list[i]];
        mainOrder = list[i];
        }
    }
} else mainOrder = list[0];
return names[mainOrder];

}

问题是我无法通过11个可用测试中的2个。但是那两个是隐藏的。谁能给我一些建议


共 (2) 个答案

  1. # 1 楼答案

    请检查以下代码: 字符串智能分配(字符串[]名称、布尔[]状态、int[]项目、int[]任务){

        String assignTo = null;
        int minvaluep = projects[0];
        int minvaluepi = 0;
        int minvaluet = tasks[0];
        int minvalueti = 0;
        int duplicate = -1;
    
        for (int j = 0; j < names.length; j++) {
            if (statuses[j] == false) {
                if (tasks[j] < minvaluet) {
                    minvaluet = tasks[j];
                    minvalueti = j;
                }
                assignTo = names[minvalueti];
            }
        }
        for (int k = 0; k < projects.length; k++) {
            for (int l = k + 1; l < projects.length; l++) {
                if (String.valueOf(projects[k]).equals(String.valueOf(projects[l]))) {
                    duplicate = k;
                }
            }
        }
    
        for (int j = 0; j < names.length; j++) {
            if (statuses[j] == false) {
                if (tasks[j] < minvaluet) {
                    minvaluet = tasks[j];
                    minvalueti = j;
                }
            }
        }
    
        if (duplicate > -1) {
            for (int i = 0; i < names.length; i++) {
                if (statuses[i] == false) {
                    if (projects[i] < minvaluep) {
                        minvaluep = projects[i];
                        minvaluepi = i;
                    }
    
                }
            }
            assignTo = names[minvaluepi];
    
        }
    
        return assignTo;
    
    }
    
  2. # 2 楼答案

    我在今天的一次采访中遇到了这个问题。 我的解决方案通过了所有测试用例。 基本上,我创建了一个包含所有给定值的hashmap,并根据需求对names数组进行排序。 这是我的解决方案

    String smartAssigning(String[] names, boolean[] statuses, int[] projects, int[] tasks) {
    
    HashMap<String, int[]>map=new HashMap<>();
    
    for(int i=0; i<names.length;i++){
       int[] obj=new int[3];
       obj[0]=tasks[i];
       obj[1]=projects[i];
       obj[2]= (statuses[i])?1:0;
       map.put(names[i],obj);
    }
    
    Arrays.sort(names, (a,b)->
    {
      if(map.get(a)[2]==0 && map.get(b)[2]==0)
         if(map.get(a)[0]-map.get(b)[0] == 0)
            return map.get(a)[1]-map.get(b)[1];
         else
            return map.get(a)[0]-map.get(b)[0];
      else
         return (map.get(a)[2]==0)? -1:1;
    }
    );
    
    return names[0];
    }