Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找两个匹配项的Java并行数组_Java_Arrays_Parallel Processing - Fatal编程技术网

查找两个匹配项的Java并行数组

查找两个匹配项的Java并行数组,java,arrays,parallel-processing,Java,Arrays,Parallel Processing,所以在学校,我们刚刚学习了数组,我们有一个关于它的项目。它是在学生姓名、考试平均分、测验平均分、家庭作业平均分和最终平均分上做一个平行数组。此外,我们必须找到最高和最低分数。我算出了最高的分数,除非两个学生在同一所高中取得了分数,否则它只会显示一个。以下是我的方法: public String getHighestScore(){ double highScore = 0; String students = ""; for(int i = 0; i < total

所以在学校,我们刚刚学习了数组,我们有一个关于它的项目。它是在学生姓名、考试平均分、测验平均分、家庭作业平均分和最终平均分上做一个平行数组。此外,我们必须找到最高和最低分数。我算出了最高的分数,除非两个学生在同一所高中取得了分数,否则它只会显示一个。以下是我的方法:

public String getHighestScore(){
    double highScore = 0;
    String students = "";
    for(int i = 0; i < totalTests; i++){
        if(quarterAverages[i] > highScore){
            highScore = quarterAverages[i];
            students = names[i];
        }
    }
    return students;
}
public字符串getHighestScore(){
双高分=0;
学生字符串=”;
对于(int i=0;i高分){
高分=四分之一平均值[i];
学生=姓名[i];
}
}
留学生;
}
这段代码现在可以工作了。我需要将if语句中的大于设置为大于或等于,并将名称添加到字符串中,而不是将其更改为一个名称

public String getHighestScore(){
    double highScore = 0;
    String students = "";
    for(int i = 0; i <= totalTests; i++){
        if(quarterAverages[i] >= highScore){
            highScore = quarterAverages[i];
            students += names[i] + " ";
        }
    }
    return students;
}
public ArrayList<String> getHighestScore(){
    double highScore = 0;
    ArrayList<String> students = new ArrayList<String>();
    for(int i = 0; i < totalTests; i++){
        if(quarterAverages[i] > highScore){
            highScore = quarterAverages[i];
            students.add(names[i]);
        }
    }
    return students;
}
public字符串getHighestScore(){
双高分=0;
学生字符串=”;
for(int i=0;i=highScore){
高分=四分之一平均值[i];
学生+=姓名[i]+“”;
}
}
留学生;
}

这一个只输出1名高分学生,而不是2名。我的问题是如何输出多个具有相同高分的学生。

伙计,考虑到您提供的大量信息和代码,下面是我的最佳建议。建议发送学生列表,而不是包含一个姓名的字符串

public String getHighestScore(){
    double highScore = 0;
    String students = "";
    for(int i = 0; i <= totalTests; i++){
        if(quarterAverages[i] >= highScore){
            highScore = quarterAverages[i];
            students += names[i] + " ";
        }
    }
    return students;
}
public ArrayList<String> getHighestScore(){
    double highScore = 0;
    ArrayList<String> students = new ArrayList<String>();
    for(int i = 0; i < totalTests; i++){
        if(quarterAverages[i] > highScore){
            highScore = quarterAverages[i];
            students.add(names[i]);
        }
    }
    return students;
}
public ArrayList getHighestScore(){
双高分=0;
ArrayList students=新ArrayList();
对于(int i=0;i高分){
高分=四分之一平均值[i];
学生。添加(姓名[i]);
}
}
留学生;
}

要返回多个名称,您需要做几件事:

  • 您应该返回一个
    列表
    ,而不是单个
    字符串
    值。(当然,如果最高分数没有平局,那么列表中只有一个元素。)
  • 您需要检查
    i
    th分数是否与当前高分挂钩,如果是,则将名称添加到当前列表中
  • 当检测到新的高分时,需要清除名称列表(并列,但不再是高分)并添加新的高分名称
  • 像这样(未经测试)的东西可能会起作用:

    public List<String> getHighestScore() {
        double highScore = 0;
        List<String> students = new ArrayList<>();
        for(int i = 0; i < totalTests; i++){
            if(quarterAverages[i] >= highScore){
                if (quarterAverages[i] > highScore) {
                    highScore = quarterAverages[i];
                    students.clear();
                }
                students.add(names[i]);
            }
        }
        return students;
    }
    
    (当然,这应该用
    StringBuilder
    来完成,但我也不知道您是否已经了解了这一点。)


    另外,由于此方法返回的是分数最高的名称,而不是最高分数本身,因此我强烈建议您相应地重命名此方法。

    首先查找分数最高的学生,然后查找分数最高的学生

    public static String getHighestScore() {
        // First get the highest score
        double highScore = 0;
        for (int i = 0; i < quarterAverages.length; i++) {
            if (quarterAverages[i] > highScore) {
                highScore = quarterAverages[i];
            }
        }
    
        // Now get the students with the highest score
        String students = "";
        for (int i = 0; i < quarterAverages.length; i++) {
            if (quarterAverages[i] == highScore) {
                students += names[i] + ", ";
            }
        }
        // Substring is to remove the ", " at the end.  That's what the -2 does.
        return students.substring(0, students.length() - 2);
    }
    
    结果:

    Chris, John
    

    好的,所以我会尽我所能帮助你提供给我们的信息。 考虑到这是一个学校作业,我想你必须返回一个字符串,不允许使用列表等等

    我还假设如下:

    • 数组
      names
      包含学生姓名
    • 您希望获得字符串中得分最高的学生的姓名。如果有几个学生的分数相同(最高),则所有学生都应包括在该字符串中
    让我们看看您的第一个代码片段(不是我建议的解决方案)

    public字符串getHighestScore(){
    双高分=0;
    学生字符串=”;
    for(int i=0;i=highScore){
    高分=四分之一平均值[i];
    学生+=姓名[i]+“”;
    }
    }
    留学生;
    }
    
    假设现在有一个学生在指数0处的四分平均值为5,在指数1处的四分平均值为6。 由于如果当前季度平均值较高,则在字符串末尾添加了一些内容,因此索引0(当前最高分数)处会有学生的姓名,然后索引1处会有学生的姓名(然后是最高分数)。这不是你想要的,因为你只想要得分最高的人的名字

    我建议这样做:

    public String getHighestScore(){
        double highScore = -1; //maybe the highest score is 0 
        String students = "";
        for(int i = 0; i <= totalTests; i++){
            if(quarterAverages[i] > highScore){
                highScore = quarterAverages[i];
                students = names[i];
            }
            else if(quarterAverages[i] == highScore){
                students += ", " + names[i];
            }
        }
        return students;
    }
    
    public字符串getHighestScore(){
    double highScore=-1;//最高分数可能是0
    学生字符串=”;
    对于(int i=0;i高分){
    高分=四分之一平均值[i];
    学生=姓名[i];
    }
    否则如果(四分之一平均值[i]==高分){
    学生+=”,“+姓名[i];
    }
    }
    留学生;
    }
    

    所以现在,每次我们发现一个学生的分数与当前最高的学生的分数相同时,我们都会将这个名字添加到字符串中。如果我们找到一个新的最高分数,我们重置字符串并从那里开始

    你的问题是什么?如果平局,输出多个学生?欢迎使用堆栈交换!试着弄清楚你的问题到底是什么——以及你想达到什么目的。你可以通过编辑你的问题来做到这一点。如果你试图显示所有与高分并列的学生,那么你需要将
    students=names[i]
    更改为+=@KevinMee不完全一样。这将在遍历数组时每次发现更高分时追加名称。您可以返回字符串数组,而不是仅返回一个字符串,并且该字符串数组将包含得分最高的每个人。因此,你可以像现在一样循环一次以获得最高分数,然后再次循环并检查是否有其他学生的分数与高分相等,并将他们添加到字符串数组中。每次遍历列表时,发现高分时,你都会将他们添加到列表中,而不仅仅是那些与最终高分相同的学生。@GriffeyDog很好。您可以修改此方法来检查列表,以确保只返回最高的列表,而不是整个列表,以防您被允许返回其他内容,或使用列表或其他内容请让我们知道
    public String getHighestScore(){
        double highScore = 0;
        String students = "";
        for(int i = 0; i <= totalTests; i++){
            if(quarterAverages[i] >= highScore){
                highScore = quarterAverages[i];
                students += names[i] + " ";
            }
        }
        return students;
    }
    
    public String getHighestScore(){
        double highScore = -1; //maybe the highest score is 0 
        String students = "";
        for(int i = 0; i <= totalTests; i++){
            if(quarterAverages[i] > highScore){
                highScore = quarterAverages[i];
                students = names[i];
            }
            else if(quarterAverages[i] == highScore){
                students += ", " + names[i];
            }
        }
        return students;
    }