Why won’t this line of code execute when there are no syntax error, or runetime errors Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Why won’t this line of code execute when there are no syntax error, or runetime errors without wasting too much if your time.

The question is published on by Tutorial Guruji team.

When I run the code I do not get my desired result for the setDepartment method. I’m trying to trap the user if they entered a wrong selection. When I execute the code and put in a value (string) that should without a doubt execute, it does not execute. I have tested to see where the problem could lay. The only thing that worked is when I tried hardcoding the correct value into the method. If I put in an incorrect value and trap the user, and put in the correct value, the user is still trapped in the loop. I checked to see if there are any logical errors in my loop, but I could not find a problem. I am at a complete loss, I can’t wait to find what I messed up on.

Please ignore the courseCost instance variable I haven’t worked on that yet, and please disregard the system.out.println(department) after the department = department.toUpperCase in the setDepartment method. I was using the system.out.println(department) in the setDepartment method to rule out any possible errors that may have been on the department = department.toUpperCase line of code. Also, you can ignore everything else, everything else works just fine. Thank you for taking the time to take a look.

import java.util.Scanner;

public class Course {
    static Scanner keyboard = new Scanner(System.in);
    private String department;
    private int courseNumber;
    private int courseCredits;
    private double courseCost;

    public Course () {
        department = "unknown";
        courseNumber = 0;
        courseCost = 0;
        courseCredits = 0;
    }

    public Course(String department, int courseNumber, int courseCredits) {
        setDepartment(department);
        setCourseNumber(courseNumber);
        setCourseCredits(courseCredits);
        //courseCost = no value will be passed to the constructor, courseCost will be calculated as courseCredits/2 * $500, see setter below (if the course is a Lab Course add $100 to the cost)
    }

    public String getDepartment() {
        return department;
    }

    public int getCourseNumber() {
        return courseNumber;
    }

    public int getCourseCredits() {
        return courseCredits;
    }

    public double getCourseCost() {
        return courseCost;
    }

    public void setDepartment(String department) {

        boolean enteredCorrectly = false;
        //department = department.toUpperCase();

        do{
            department = department.toUpperCase();
            System.out.println(department);
            //ENGL, MATH, COMP, HIST, HUMN, SCIE, LANG, PHYS
            if( (department == "ENGL") || (department == "MATH") || (department == "COMP") || 
                (department == "HIST") || (department == "HUMN") || (department == "SCIE") || 
                (department == "LANG") || (department == "PHYS") ) {
                this.department = department;
                enteredCorrectly = true;
            } else {
                System.out.println("Please re-enter a valid department.");
                department = keyboard.nextLine();

            }
        } while(!(enteredCorrectly));

    }

    public void setCourseNumber(int courseNumber) {

        boolean enterCorrectly = false;

        do{
            if(1 <= courseNumber && courseNumber <= 399) {
                this.courseNumber = courseNumber;
                enterCorrectly = true;
            } else {
                System.out.println("Please re-enter a valid course number.");
                courseNumber = keyboard.nextInt();
                keyboard.nextLine();
            }
        } while(!(enterCorrectly));

    }

    public void setCourseCredits(int courseCredits) {

        boolean enterCorrectly = false;

        do{
            if(courseCredits == 3 || courseCredits == 4 || courseCredits == 6) {
                this.courseCredits = courseCredits;
                enterCorrectly = true;
            } else {
                System.out.println("Please re-enter a valid course credits.");
                courseCredits = keyboard.nextInt();
                keyboard.nextLine();
            }
        } while(!(enterCorrectly));

    }

    public void setCourseCost(double courseCost) {
        this.courseCost = courseCost;
    }

    public static void main(String[] args) {
        Course c = new Course ("engl", 991, 1);
    }
}

Answer

I think the reason it is not giving you the expected results is because in the comparison block you are using the operator ==, which means you are comparing the reference of the strings:

if( (department == "ENGL") || (department == "MATH") || (department == "COMP") || 
    (department == "HIST") || (department == "HUMN") || (department == "SCIE") || 
    (department == "LANG") || (department == "PHYS") ) {
    this.department = department;
    enteredCorrectly = true;
}

In Java, to compare the value of strings, you should use the .equals() method:

if( (department.equals("ENGL") || (department.equals("MATH") || (department.equals("COMP") || 
    (department.equals("HIST") || (department.equals("HUMN") || (department.equals("SCIE") || 
    (department.equals("LANG") || (department.equals("PHYS") ) {
    this.department = department;
    enteredCorrectly = true;
}

We are here to answer your question about Why won’t this line of code execute when there are no syntax error, or runetime errors - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji