问题:如果marksObtained低于35
,仍然会获得B级在数据库中存储一个描述评分系统的数组
不能使用switch-case ,因为不同的类会有不同的评分系统
String[] gradeDetails = {A,60,100,
B,45,59.99,
C,35,44.99,
D,0,34.99};
推断成绩的逻辑是
int j=0;
while (j<gradeDetails.length/3){
grade = gradeDetails[j++];
min = Float.parseFloat(gradeDetails[j++]);
max = Float.parseFloat(gradeDetails[j++]);
if(marksObtained >= min && marksObtained <= max)
break;
}
只是为不同的增量使用了不同的变量
j=0;
k=0;
while (k<gradeDetails.length/3){
grade = gradeDetails[j++];
min = Float.parseFloat(gradeDetails[j++]);
max = Float.parseFloat(gradeDetails[j++]);
if(marksObtained >= min && marksObtained <= max)
break;
k++;
}
没想到解决方案就这么傻了。 全部谢谢
答案 0 :(得分:2)
gradeDetails.length = 12
=&gt; gradeDetails.length/3
将为4
while (j<gradeDetails.length/3){
grade = gradeDetails[j++]; // A -> j=0 , B -> j = 4 loop will end
min = Float.parseFloat(gradeDetails[j++]);
max = Float.parseFloat(gradeDetails[j++]);
if(marksObtained >= min && marksObtained <= max)
break;
}
所以B只是不制动循环条件的最后一次迭代。 你可以试试这个:
while (j<gradeDetails.length){
grade = gradeDetails[j++];
min = Float.parseFloat(gradeDetails[j++]);
max = Float.parseFloat(gradeDetails[j++]);
if(marksObtained >= min && marksObtained <= max)
break;
}
OR
while (j<gradeDetails.length/3){
grade = gradeDetails[j*3];
min = Float.parseFloat(gradeDetails[j*3+1]);
max = Float.parseFloat(gradeDetails[j*3+2]);
j++;
if(marksObtained >= min && marksObtained <= max)
break;
}
或者您可以使用2D阵列
或者您可以使用包含mark,min和max。
的类答案 1 :(得分:1)
问题在于你的while表达式。
j
每个循环增加3(因为你执行j++
三次)。
所以在第二个循环之后,它等于5,这比长度除以3(4)更高,所以你已经不在循环中了。
您应该只使用while j < (gradeDetails.length)
答案 2 :(得分:0)
实现你想要的代码......
public static void main(String[] args) {
String[] gradeDetails = { "A", "60", "100", "B", "45", "59.99", "C", "35", "44.99", "D", "0", "34.99" };
double marks = 0;
String grade = "";
for (int j = 0; j < gradeDetails.length; j++) {
grade = gradeDetails[j];
j = j + 1;
double min = Double.valueOf(gradeDetails[j]);
j = j + 1;
double max = Double.valueOf(gradeDetails[j]);
if (marks >= min && marks <= max)
break;
}
System.out.println("Your grade is :: "+grade);
}