Java 为什么赢了';t这行代码在没有语法错误或运行时错误时执行

Java 为什么赢了';t这行代码在没有语法错误或运行时错误时执行,java,Java,当我运行代码时,我没有得到setDepartment方法所需的结果。如果用户输入了错误的选择,我会试图诱捕他们。当我执行代码并输入一个毫无疑问应该执行的值(字符串)时,它不会执行。我已经做了测试,看看问题出在哪里。唯一有效的是当我尝试将正确的值硬编码到方法中时。如果我输入了不正确的值并捕获了用户,并且输入了正确的值,那么用户仍然被困在循环中。我检查了我的循环中是否有任何逻辑错误,但没有发现问题。我完全不知所措,我迫不及待地想找到我搞砸了的东西 请忽略courseCost实例变量我还没有处理过这个

当我运行代码时,我没有得到setDepartment方法所需的结果。如果用户输入了错误的选择,我会试图诱捕他们。当我执行代码并输入一个毫无疑问应该执行的值(字符串)时,它不会执行。我已经做了测试,看看问题出在哪里。唯一有效的是当我尝试将正确的值硬编码到方法中时。如果我输入了不正确的值并捕获了用户,并且输入了正确的值,那么用户仍然被困在循环中。我检查了我的循环中是否有任何逻辑错误,但没有发现问题。我完全不知所措,我迫不及待地想找到我搞砸了的东西

请忽略courseCost实例变量我还没有处理过这个变量,请忽略setDepartment方法中department=department.toUpperCase后面的system.out.println(department)。我使用setDepartment方法中的system.out.println(department)来排除代码行中可能出现的任何错误。另外,你可以忽略其他一切,其他一切都很好。谢谢你抽出时间来看看

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);
    }
}
import java.util.Scanner;
公共课{
静态扫描仪键盘=新扫描仪(System.in);
私人弦乐部;
私家车;
私人int课程编辑;
私人双科收费;
公共课程(){
department=“未知”;
courseNumber=0;
courseCost=0;
courseCredits=0;
}
公共课程(弦乐系、int courseNumber、int courseCredits){
科室(科室),;
设置courseNumber(courseNumber);
设置课程编辑(课程编辑);
//courseCost=不会将任何值传递给构造函数,courseCost将按courseCredits/2*$500计算,请参见下面的setter(如果课程是实验室课程,则在成本中增加$100)
}
公共部门(){
退货部;
}
public int getCourseNumber(){
返回计数器;
}
public int getCourseCredits(){
返回课程编辑;
}
公共双getCourseCost(){
返回课程成本;
}
公共部门(字符串部门){
布尔输入正确=假;
//department=department.toUpperCase();
做{
department=department.toUpperCase();
系统输出打印(部门);
//英语、数学、综合、历史、人文、科学、语言、物理
如果((department==“ENGL”)| |(department==“MATH”)| |(department==“COMP”)| |
(department==“HIST”)| |(department==“HUMN”)| |(department==“SCIE”)| |
(department==“LANG”)|(department==“PHYS”)){
这个部门=部门;
正确输入=真;
}否则{
System.out.println(“请重新输入有效的部门”);
department=keyboard.nextLine();
}
}而(!(正确输入));
}
公共void setCourseNumber(int courseNumber){
布尔值=false;
做{

如果(1可能的原因是两件事——声明一个私有全局变量:

private String department;
以下几行:

department = department.toUpperCase();
System.out.println(department);
在我看来,问题在于全局私有var和方法param之间的名称相同。
只需尝试将方法参数重命名为departmentParam(例如),然后尝试打印它。

我认为它没有给出预期结果的原因是因为在比较块中使用运算符
=
,这意味着您正在比较字符串的引用:

if( (department == "ENGL") || (department == "MATH") || (department == "COMP") || 
    (department == "HIST") || (department == "HUMN") || (department == "SCIE") || 
    (department == "LANG") || (department == "PHYS") ) {
    this.department = department;
    enteredCorrectly = true;
}
在Java中,要比较字符串的值,应使用以下方法:


“请忽略[…]”您好,欢迎。请从问题中删除不相关的代码。您可能还想了解。最后,您是如何确定该方法未运行的?您确定使用该类的客户端代码未捕获并忽略异常吗?这是否回答了您的问题?@Federico,是的,非常感谢!另外,我会确保删除不相关的代码,谢谢你对我的两个问题的反馈!我不太确定。稍后他们会
this.department=department
,所以他们显然知道他们在该片段中做什么。唯一卑鄙的事情是选择名称,否则它应该按预期工作。谢谢@Vi的帮助lla,非常感谢。这不是问题,但问题是我们不能使用“==”要比较字符串,首选的方法是.equals方法!如果是这种情况,那么问题是a,应该标记为a,而不是回答。初学者怎么知道要寻找关于字符串相等的问题?我应该吻你们两个费德里科和蒂亚戈..muah muah(不是同性恋)老兄,你们不知道我被困在这上面多久了,非常感谢!你们也是@NomadMaker,谢谢!我同意你们的观点,也许他们可以创建一个机器人,让问题一直持续到noob(我)看到它,然后他们可以把它取下来。我认为这将是一个很棒的功能。@FedericoklezCulloca对此表示抱歉。我已经熟悉了回答问题的过程。你能告诉我应该如何继续吗?
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;
}