【问题标题】:Java Code for finding grade from marks is incorrect从分数中查找成绩的 Java 代码不正确
【发布时间】:2016-07-15 10:58:36
【问题描述】:

问题:如果获得的分数低于 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++;
}

没想到解决方案这么傻。 谢谢大家

【问题讨论】:

  • while (j&lt;gradeDetails.length/3){ ?

标签: java loops oop operators


【解决方案1】:

gradeDetails.length = 12 => 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;
}

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;
}

或者你可以使用二维数组

或者您可以使用包含标记、最小值和最大值的类。

【讨论】:

  • 明白...我会尝试改变一些东西
【解决方案2】:

问题在于您的 while 表达式。 j 每个循环增加 3 (因为您执行 j++ 三次)。 所以在第二个循环之后,它等于5,它高于长度除以3(4),所以你离开了循环。

你应该简单地使用while j &lt; (gradeDetails.length)

【讨论】:

    【解决方案3】:

    实现你想要的代码...

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

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多