查找两个匹配项的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;
}