用于从标记中查找成绩的Java代码不正确

时间:2016-07-15 10:58:36

标签: java loops oop operators

问题:如果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++;
}

没想到解决方案就这么傻了。 全部谢谢

3 个答案:

答案 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);
}