我想我错误地使用了IF语句

时间:2014-11-12 16:19:48

标签: java if-statement

所以我试图使用Java制作一个GPA计算器,而我却坚持使用其中一个步骤。我尝试编写一个代码,该代码接受用户的输入,然后将其转换为数字,然后我将使用该数字来计算GPA。到目前为止,这是我的代码:

public class data {

    public static void main(String[] args) {

        String english;
        double v1 = 0;


        Scanner reader = new Scanner(System.in);

        System.out.println("Enter your english grade");
        english= reader.nextLine();

        if (strcmp(english,"A+")==0) {
            v1 = 4.4;
        }

        if (strcmp(english,"A")==0) {   
            v1= 4.0;
        }
        if (strcmp(english,"A-")==0) {  
            v1= 3.6;
        }

        if (strcmp(english,"B+")==0) {  
            v1= 3.4;
        }

        if (strcmp(english,"B")==0) {   
            v1= 3;
        }
        if (strcmp(english,"B-")==0) {  
            v1= 2.6;
        }
        if (strcmp(english,"C+")==0) {  
            v1= 2.4;
        }
        if (strcmp(english,"C")==0) {   
            v1= 2;
        }
        if (strcmp(english,"C-")==0) {  
            v1= 1.6;
        }
        if (strcmp(english,"D+")==0) {  
            v1= 1.4;
        }
        if (strcmp(english,"D")==0){    
            v1= 1;
        }

        if (strcmp(english,"D-")==0) {  
            v1= 0.6;
        }
        if (strcmp(english,"F")==0) {   
            v1= 0.0;
        }
        else {

            v1=0.0;
        }


        System.out.println(v1);

正如你所看到的,我只是为了检查而在最后打印出V1,但是它一直将V1设为0.0,即用户输入" F"时的值。如果我像这样评论那段代码:

/*if (strcmp(english,"F")==0) { 
            v1= 0.0;
        }*/

然后它给出的输出值是0.6,即用户输入D-时的值。我想我应该把回归系统放在某个地方?虽然我真的不确定。任何帮助将不胜感激。

(如果它还没有建立,我是java的初学者:P)

编辑:伙计们,当我尝试使用Switch方法(我使用eclipse)时,它给了我这个错误:"无法为源级别低于1.7的值打开String类型的值。只允许使用可转换的int值或枚举常量"。它提供的解决方案会导致进一步的复杂化,所以我想避免使用switch语句:/

10 个答案:

答案 0 :(得分:7)

    if (strcmp(english,"F")==0) {   
        v1= 0.0;
    }
    else {

        v1=0.0;
    }

除此之外你说 - 只要它不是F,就把它放在v1中。

答案 1 :(得分:5)

您编写的方式v1将为0.0,除非english"F"

您需要使用else if

if (strcmp(english,"A+")==0) {
    v1 = 4.4;
} else if (strcmp(english,"A")==0) {  
     // and so on

一些Java民众喜欢switch字符串。但这是Java中一个相当新的特性,你需要引入的break语句可能会混淆。

答案 2 :(得分:3)

使用switch案例,如上所述。这会很有帮助,因为您可能会对大量if语句感到困惑。

switch(english){
  case "A+":
   v1=4.4
  break;

  case "D-":
   v1=0.6
  break;

  default:
   v1=0.0;
  break;
}

答案 3 :(得分:2)

您可能会发现这非常有用:

if(english.equalsIgnoreCase("A+"))
 //do stuff...
else if(english.equalsIgnoreCase("A-"))
  //do other stuff and so on...

equalsIgnoreCase()方法忽略区分大小写,如果这不是您正在寻找的内容,则可以尝试使用equals()

新的Java版本也为字符串引入了switch-case,所以你的代码可以成为这个代码:

switch(english){
case "A+":
    //do stuff...
    break;
case "A-":
    //do other stuff... and so on...
    break;
}

答案 4 :(得分:0)

删除最后一个部分。它应该是好的。因为无论等级是什么,如果它不是“F”,它将转到else语句并将其设置为0.0

答案 5 :(得分:0)

else附加到之前的if;你做了很多事情然后最后你做if(...) { v1 = 0.0 } else { v1 = 0.0 },在任何情况下都将值设置为0.0。

您可能希望在每一步都使用else if,这将解决当前的问题。

答案 6 :(得分:0)

您说如果字符串不是F,请设置值v1 = 0.0

if(strcmp(english,"F")==0) {   
        v1= 0.0;
    }
    else {

        v1=0.0;
    }

答案 7 :(得分:0)

试试这个:

String english= reader.nextLine();
if (english.equals("A+")) {
    v1 = 4.4;
}
else if (english.equals("A")) {   
    v1= 4.0;
}
else if (english.equals("A-")) {  
    v1= 3.6;
}
else{
    v1=0.0;
}

答案 8 :(得分:0)

基本上,无论用户输入F还是其他任何内容,您都要将值设置为零:

    if (strcmp(english,"F")==0) {   
        v1= 0.0;
    }
    else {

        v1=0.0;
    }

请看这里,您已将v1设置为0.0 if (strcmp(english,"F")==0),但如果用户未输入F.我认为您打算在if部分中添加其他内容而不是0.0 ,像这样:

    if (strcmp(english,"F")==0) {   
        v1= /*something else*/;
    }
    else {

        v1=0.0;
    }

因为这似乎让你感到惊讶。

答案 9 :(得分:0)

将代码strcmp(英文," F")== 0替换为以下english.equal(" A +")