我有一系列成绩(g),这是一个int[]
,我试图找到该数组中最大的成绩。我试过这个:
public static String highestGradeName(int[] g, String[] n) {
String highStudent;
int highest = g[0];
for (int i=1; i < g.length; i++) {
if (highest < g[i]) {
highStudent = n[i+1];
return (highStudent);
}
}
return null;
}
我有另一个数组,它是一个String数组并包含学生的名字,我有return null
因为它说它需要一个return语句但是我没有计划它是{ {1}}。导致它返回null
而不是null
的原因是什么?
我使用了确切的代码来查找最低等级,并且它完好无损我唯一能做的就是将highstudent
中的if语句更改为highest > g[i]
。
答案 0 :(得分:3)
从循环内部返回是错误的,因为稍后在数组中总是可以有更大的数字。您应该保留最高等级的索引,并在最后返回相应的名称:
public static String highestGradeName(int[] g, String[] n) {
int highest = 0;
for (int i = 1; i < g.length; i++) {
if (g[highest] < g[i]) {
highest = i;
}
}
return n[highest];
}
答案 1 :(得分:0)
根据你的逻辑,让我们打破局面。
原始测试用例:
将{0,1,2}
作为整数数组。
将{"arya", "jon", "tyrion"}
作为字符串数组。
highest = 0; // according to your code.
For int i = 1, i < 3; i++
0 < 1
highstudent = 2 // tyrion
// returns tyrion
你得到null的原因是你的0整数索引应该大于或等于1的索引。
现在,当您在方法中使用类型String时。你应该返回一个字符串,这就是你的编辑所说的有回报的东西。你应该使用循环返回,因为你需要找到最高的学生,这只有在循环所有列表后才可能。
你可以试试这个:
public static String highestGradeName(int[] g, String[] n) {
int max = 0;
int index = 0;
for (int i = 0; i < g.length; i++) {
if (max < g[i]) {
max = g[i];
index = i;
}
}
return n[index];
}
PS:根据mureinik的回答改编代码,我还有一个变量可以帮助您轻松理解。