【问题标题】:Constructor and different data types are confusing构造函数和不同的数据类型令人困惑
【发布时间】:2013-09-22 08:37:05
【问题描述】:

我正在通过构造函数传递一个字符串并将其值分配给 Grade 类型对象类变量。我知道这很简单,但我无法弄清楚这项工作。我不能修改变量或构造函数参数,只能实现构造函数。

我查看了字符串中的方法,但一个小时后无法弄清楚该怎么做。铸造/转换/ idk

public class Course
{

private String courseNumber;
private int numberOfCredits;
private Grade gradeReceived;
private String termWhenTaken;

/**
 * The value for the courseNumber instance variable is converted to uppercase.
 * The numberOfCredits instance variable is set to the credits passed as a parameter if     it's 0 or more. 
 * Otherwise, it gets set to 0.
 */   
public Course(String course, int credits, String grade, String term) 
{    courseNumber = course.toUpperCase();
     numberOfCredits = credits; 
     termWhenTaken = term;
     gradeReceived = grade;   <-----problem here  mismatched data types obviously
}

【问题讨论】:

  • 如果不看 Grade 类就很难提供帮助,因为我们不知道它的构造函数期望什么。问题是您试图将变量 (gradeRecieved) 分配给不同类型的值。
  • gradeReceived = new Grade(grade);
  • 糟糕,谢谢 - 这里是构造函数“public Grade(String Grade)”
  • 谢谢@nachokk 解决了这个问题。你能解释一下它是如何工作的吗?
  • @XoronioX 查看提供的答案,说的和我一样,但有解释,java 是强类型语言,你不能将 String 分配给 Grade 之间没有任何关系,所以你需要一个Grade 对象。

标签: java string types constructor


【解决方案1】:

您不能将 A 类型的对象分配给 B 类型的引用变量(除非 A 是 B 的子类)。您不能将String 分配给Grade

您需要使用String 创建一个Grade

gradeReceived = new Grade(grade);

new 运算符调用构造函数public Grade(String grade) 并返回一个新的Grade 对象。

【讨论】:

  • 谢谢!问题解决了。这太简单了,哈哈。为什么我不知道,我的java老师很烂? =\
  • 完成@nachokk 我需要关闭主题还是让他们回答?
  • @XoronioX 让他们回答!以后有类似问题的人可以查看这个问题并解决他们的问题! ;)
【解决方案2】:

您将需要某种转换器或映射来将字符串值(例如“6th”)转换为 Grade 对象。这样的事情可以让你开始:

public Course(String course, int credits, String grade, String term) {
    ...
    gradeReceived = convertGradeStringToGrade(grade);
    ...
}

private Grade convertGradeStringToGrade(String gradeStr) {
    if ("A".equals(gradeStr)) {
        return new Grade("A");
    } else if ("B".equals(gradeStr)) {
        return new Grade("B");
    } else if ... etc
    } else {
        // do something (throw an exception? return null?) if the string doesn't match a known grade
    }
}

或者你可以做类似的事情

public Course(String course, int credits, String grade, String term) {
    ...
    gradeReceived = new Grade(grade);
    ...
}

如果没有任何转换要做。

您也可以为 Grade 对象使用枚举,但这可能超出了您当前尝试执行的范围。

【讨论】:

  • 你的方法convertStringToGrade你应该审查.. -1
  • 感谢您的回复!是的,我在年级班上做了非常相似的事情。公共等级(字符串等级){如果(等级。等于(“a”)){字母等级=等级.toUpperCase(); numberValue = VALUE_OF_A;} else if (grade.equals("A")) {letterGrade =grade.toUpperCase(); numberValue = VALUE_OF_A;} else if (grade.equals("b")) {letterGrade =grade.toUpperCase(); numberValue = VALUE_OF_B;}
猜你喜欢
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2013-05-25
相关资源
最近更新 更多