首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我正在尝试获取一个值,同时从3个数组中使用索引?

我正在尝试获取一个值,同时从3个数组中使用索引?
EN

Stack Overflow用户
提问于 2018-06-23 02:27:39
回答 3查看 51关注 0票数 1
代码语言:javascript
复制
name[5] = {Peter, James, Roger, Peter, Josę};

subject[5] = {English, Math, English, Science, Math};

grade[5] = {96, 67, 78, 84, 100};

我在这里试图实现的是获得个人获得最高分数的主题。请注意名称数组中的重复姓名,这是同一个人。我尝试做的是使用map来实现结果,但是对于我目前拥有的java级别来说,使用3个数组是相当棘手的。我想要获取学生的名字,将其与他们的成绩相匹配,并选择具有最高分数的科目,因此基本上每个学生的名字返回一个值。所以像这样,

英语数学英语数学

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-23 02:42:23

首先,我将获得与每个名称相关联的索引列表:

代码语言:javascript
复制
HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();
int index = 0;
for (String n: name) {
    if (!map.containsKey(n)) {
        map.put(n, new ArrayList<Integer>());
    }
    map.get(n).add(index);
    index++;
}

然后我会遍历每个名字:

代码语言:javascript
复制
for (String name : map.keySet()) {

获取他们的指数,找出最高分的指数:

代码语言:javascript
复制
    List<Integer> indices = map.get(name);
    int maxScore = 0, maxIndex = 0;

    for (int index: indices) {
        if (grades[index] > maxScore) {
            maxIndex = index;
        }
    }

然后我将从subjects数组中打印出相同的索引:

代码语言:javascript
复制
    System.out.println(name + " did best in " + subject[index]);
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-23 02:39:45

我将创建一个名为getStudentsHighestMark的方法,该方法接受姓名和成绩数据。该方法将迭代成绩,并只考虑有问题的学生的成绩。您需要一个int来跟踪您所看到的该名称的最高等级,并需要一个对应于该等级的课程的字符串。迭代成绩后,只需返回学生最高分的课程名称即可。如下所示:

代码语言:javascript
复制
public static void main(String[] args) {
    String[] names = {"Peter", "James", "Roger", "Peter", "Jose"};
    String[] subjects = {"English", "Math", "English", "Science", "Math"};
    int[] grades = {96, 67, 78, 84, 100};

    String petersBest = getStudentsHighestMark("Peter", names, subjects, grades);
    System.out.println("Peter's best is: " + petersBest); //Peter's best is: English
    String jamesBest = getStudentsHighestMark("James", names, subjects, grades);
    System.out.println("James's best is: " + jamesBest);  //James's best is: Math
    String rogersBest = getStudentsHighestMark("Roger", names, subjects, grades);
    System.out.println("Roger's best is: " + rogersBest);  //Roger's best is: English
    String josesBest = getStudentsHighestMark("Jose", names, subjects, grades);
    System.out.println("Jose's best is: " + josesBest);  //Jose's best is: Math
}

private static String getStudentsHighestMark(String name, String[] names, String[] subjects, int[] grades) {
    int highestGrade = 0;
    String bestCourse = "";
    for(int i = 0; i < names.length; i++) {
        if(names[i].equals(name) && grades[i] > highestGrade) {
            highestGrade = grades[i];
            bestCourse = subjects[i];
        }
    }
    return bestCourse;
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-23 04:03:13

Java 8解决方案:我将组合一个对象,并丢弃分数最低的对象。请找到下面的代码片段。

代码语言:javascript
复制
public class Main {

public static void main(String[] args) {
    String[] names = {"Peter", "James", "Roger", "Peter", "Jose"};
    String[] subjects = {"English", "Math", "English", "Science", "Math"};
    int[] grades = {96, 67, 78, 84, 100};
    System.out.println(getStudentWithHighScoredSubjects(names, subjects, grades));
}

public static Map<String, String> getStudentWithHighScoredSubjects(String[] names, String[] subjects, int[] grades) {
    return IntStream.range(0, names.length)
            .mapToObj(i -> new StudentHighestGradeSubject(names[i], subjects[i], grades[i]))
            .collect(Collectors.toMap(StudentHighestGradeSubject::getName, Function.identity(), (s1, s2) -> {
                if (s1.getGrade() > s2.getGrade()) {
                    return s1;
                } else {
                    return s2;
                }
            }, LinkedHashMap::new))
            .entrySet()
            .stream()
            .collect(Collectors.toMap(Map.Entry::getKey, e-> e.getValue().getHighestGradeSubject(), (s1, s2) -> s2, LinkedHashMap::new));
}

private static class StudentHighestGradeSubject {
    private String name;
    private String highestGradeSubject;
    private int grade;

    public StudentHighestGradeSubject(String name, String highestGradeSubject, int grade) {
        this.name = name;
        this.highestGradeSubject = highestGradeSubject;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHighestGradeSubject() {
        return highestGradeSubject;
    }

    public void setHighestGradeSubject(String highestGradeSubject) {
        this.highestGradeSubject = highestGradeSubject;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StudentHighestGradeSubject that = (StudentHighestGradeSubject) o;
        return Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

}

上面的代码在执行时给出了以下输出

代码语言:javascript
复制
{Peter=English, James=Math, Roger=English, Jose=Math}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50993755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档