试图计算GPA

时间:2011-11-01 01:14:28

标签: java string compiler-errors

这是我到目前为止的代码(已经更新):

import java.util.Scanner; 

public class gpa {

   public static void main(String[] args) {
      double gpa=0;
      double input = 0;
      String grade= "";
      int classes =0;
      double fail =0;
      do
      {
         System.out.print("Enter Grade (n to quit): "); 
         Scanner sc = new Scanner(System.in); 
          grade = sc.nextLine(); 
          grade = grade.toLowerCase(); 
          if (grade.equals("a"))
          {
             input = 4.0;
          }
          if (grade.equals("b"))
          {
             input = 3.0;
          }
          if (grade.equals("c"))
          {
             input = 2.0;
          }
          if (grade.equals("d"))
          {
             input = 1.0;
          }
          if (grade.equals("f"))
          {
             fail = 1;
          }

          gpa+=input;
          classes++;
      } while(grade!="n");
      System.out.print("GPA: " + gpa + "   "); 

      gpa/=classes;
      if (gpa>=2 && classes >=4 && fail !=1)
      {
         System.out.print("Eligible");    
      }
      else if(classes <4)
      {
         System.out.print("Ineligible. less than 4 classes"); 
      }
      else if (gpa < 2.0)
      {
         System.out.print("Ineligible. GPA is less than 2.0"); 
      }
      else if (gpa >=2.0 && fail == 1)
      {
         System.out.print("Ineligible. GPA is above 2.0, but has an F");
      }
      else if (gpa <2.0 && fail ==1)
      {
         System.out.print("Ineligible. GPA is below 2.0 and has F");
      }
   }

}

这是我需要输出的内容:

  1. 合格
  2. 不合格,少于4个班级
  3. 不合格,gpa低于2.0
  4. 不合格,gpa高于2.0但有F级(注:gpa> = 2.0)
  5. 不合格,gpa低于2.0且具有F级
  6. 不断要求输入。我怎么阻止这个? 我尝试将成绩转化为焦炭,但这对我来说非常可怕。 我认为这可能是编译器错误或其他什么。 任何帮助,将不胜感激。虽然有用的帮助会降低我的血压。

6 个答案:

答案 0 :(得分:1)

您使用的是String(对象)而不是char,因此您需要使用.equals方法。例如而不是grade == "a",您需要grade.equals("a")

答案 1 :(得分:1)

这让很多新的Java程序员兴奋不已,这是一个非常常见的错误。您需要使用.equals方法,而不是==运算符。请参阅Java String.equals versus ==

答案 2 :(得分:1)

除了破坏的比较(测试两个字符串是否引用相同的对象而不是它们的内容在逻辑上相等),您也无法将input设置为0以获得˚F。因此,单个 f 计入GPA与上一个等级相同。

当此人最终输入 n 时,您仍然可以进行数学计算以添加成绩并增加成绩数。此外,您实际上从未计算过GPA(您只需将成绩相加)。

答案 3 :(得分:1)

首先,您无法使用==运算符比较字符串。这样做是比较实际的对象引用,即。对于grade == "a"它正在检查grade"a"是否是相同的对象,而不是它们。

为了检查字符串的内容是否相等,请使用.equals(),即。 grade.equals("a")

另一件事,GPA不应该是你总分的平均值吗?即。完成循环后gpa /= classes

此外,不是使用double来存储fail,而是使用标志变量来了解主题是否失败,使用boolean并将其设置为true等级为F.说到if语句,它不会修改input,而input的先前值会被添加到gpa而非失败等级0.0

那么无效输入呢?这也会导致gpa增加前一个值input

编辑并使用一些else if而不是单独的if语句,因为即使一个条件通过,也会检查其他所有条件。即。如果grade.equals("a")为真,您仍然会不必要地检查grade是否也是“b”,“c”,“d”和“f”。

EDIT2:根据您刚刚添加的条件列表以及最后一段if语句的方式,一般规则是让您的更具体条件更广泛化为了使它们不被广义的阴影所笼罩。即。第5号(“不合格,gpa低于2.0且有F等级”)被3号阴影(“不合格,gpa低于2.0”)如果你按照那种顺序保留它们,如animuson所述。

答案 4 :(得分:0)

您在“while”子句中修复了对相等运算符的滥用。它应该是

while(!grade.equals("n")

答案 5 :(得分:-1)

Java,JavaScript,PHP或C ++,语言无关紧要,因为方法都是一样的。您需要认真考虑在代码中的这两行中使用相同变量的含义:

else if (gpa <2.0 && fail ==1)