0

I am new to Java and I am not too familiar with the syntax. I've been working on a program to convert String inputs into a Numeric output (Letter Grades to Numeric) and I keep seeing the string I enter printed to the terminal although it is only able to print double values. Program is below:

Scanner lettGradein = new Scanner(System.in);
            
            System.out.println("Enter a letter grade: ");

            String lettGrade = lettGradein.nextLine();
            
        // public   
            
            if (lettGrade == "A" && lettGrade.substring(0,1) == "+"){
               double initialgradeStep = 4;
               double finalgradeOut = initialgradeStep;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "B" && lettGrade.substring(0,1) == "+"){
               double initialgradeStep = 3;
               double finalgradeOut = initialgradeStep + 0.3;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "C" && lettGrade.substring(0,1) == "+"){
               double initialgradeStep = 2;
               double finalgradeOut = initialgradeStep + 0.3;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "D" && lettGrade.substring(0,1) == "+"){
               double initialgradeStep = 1;
               double finalgradeOut = initialgradeStep + 0.3;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "A" && lettGrade.substring(0,1) == "-"){
               double initialgradeStep = 4;
               double finalgradeOut = initialgradeStep;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "B" && lettGrade.substring(0,1) == "-"){
               double initialgradeStep = 3;
               double finalgradeOut = initialgradeStep - 0.3;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "C" && lettGrade.substring(0,1) == "-"){
               double initialgradeStep = 2;
               double finalgradeOut = initialgradeStep - 0.3;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
            else if (lettGrade == "D" && lettGrade.substring(0,1) == "-"){
               double initialgradeStep = 1;
               double finalgradeOut = initialgradeStep - 0.3;
               System.out.println("Your Grade is equal to: " + finalgradeOut);
           }
             else if (lettGrade == "A"){
                double initialgradeStep = 4.0;
                System.out.println("Your Grade is equal to: " + initialgradeStep);
            }
            
            else if (lettGrade == "B"){
                double initialgradeStep = 3.0;
                System.out.println("Your Grade is equal to: " + initialgradeStep);
       }
           else if (lettGrade == "C"){
               double initialgradeStep = 2.0;
               System.out.println("Your Grade is equal to: " + initialgradeStep);
           }
           else if (lettGrade == "D"){
               double initialgradeStep = 1.0;
               System.out.println("Your Grade is equal to: " + initialgradeStep);
           }
           else if (lettGrade == "F"){
               double initialgradeStep = 0;
               System.out.println("Your Grade is equal to: " + initialgradeStep);
           }
                        
            if (lettGrade == "F+"){
                System.out.println("There is no F+ or F- Grade");
            }
            
            if (lettGrade == "F-"){
                System.out.println("There is no F+ or F- Grade");

It is essentially a giant if else statement but there shouldn't be the output I am receiving. For example, when I enter A+, I see A+ printed to the console. Am I missing something? Any help greatly appreciated.

  • As this is just a snippet, we cannot see if there is another `println()` present. First, [read this about comparing strings](https://stackoverflow.com/q/513832/1270789). Second, a better structure would be `if (lettGrade[0] == 'A') ... elseif 'B' ...` then `if (lettGrade[1] == '+') ...`, or, if you have learnt it already, replace the `if`s with a `switch`. – Ken Y-N Nov 26 '21 at 06:37
  • You’re checking for identity and not equality: https://stackoverflow.com/questions/1692863/what-is-the-difference-between-identity-and-equality-in-oop – dpr Nov 26 '21 at 06:38
  • @dpr You are right, do you know how I might be able to rewrite a line to solve for equality? I still don't understand why it prints what I entered. – java_explore Nov 26 '21 at 06:41
  • 1
    Check the linked questions and answers. This should provide enough input to solve this problem. – dpr Nov 26 '21 at 06:47
  • @dpr Thank you. So I followed a suggestion to replace the == with .equals based on what was mentioned earlier between identity and equality. I still get the same output. Any advice? – java_explore Nov 26 '21 at 06:56
  • `lettGrade == "A" && lettGrade.substring(0,1) == "+"` becomes `lettGrade.equals("A") && lettGrade.substring(0,1).equals("+")`, but given the input `"A+"` it does not equal `"A"` and `lettGrade.substring(0,1)` is `"A"`, not `"+"`. Starting from `char grade = lettGrade[0]; char plusMinus = lettgrade[1];` will help simplify everything. – Ken Y-N Nov 26 '21 at 07:11
  • Either use char or lettGrade.equals("A+") and so on. – dpr Nov 26 '21 at 10:51

0 Answers0