我正在用Java编程。我已经在每种方法中添加了注释,以解释它们应该做什么(根据分配)。我将我所知道的添加到了存根Password.java(这是我在研究学校提供的javadoc之后创建的)。我的问题不是几个函数,我知道testWord和setWord中有错误,但是我自己解决。我的问题是关于这条线的:
Password.java
public static final java.lang.String INITIAL;
这行是由学校提供的,因此我必须假设它是正确的,我在任何地方都找不到关于常量字段值INITIAL的任何文档,因此,如果有人可以向我提供有关这方面的信息,那将是惊人的(例如,如何处理了吗?它存储了什么?如果有的话,类型?)。我也在Eclipse的这一行上遇到错误:
空白的最终字段INITIAL可能尚未初始化
为什么这里出现此错误?在此先感谢您的评论。
仅供参考,来自Password.java的代码:
package ss.week1; public class Password extends java.lang.Object { // ------------------ Instance variables ---------------- /** * The standard initial password. */ public static final java.lang.String INITIAL; // ------------------ Constructor ------------------------ /** * Constructs a Password with the initial word provided in INITIAL. */ public Password() { } /** * Tests if a given string is an acceptable password. Not acceptable: A word * with less than 6 characters or a word that contains a space. * * @param suggestion * @return true If suggestion is acceptable */ // ------------------ Queries -------------------------- public boolean acceptable(java.lang.String suggestion) { if (suggestion.length() >= 6 && !suggestion.contains(" ")) { return true; } else { return false; } } /** * Tests if a given word is equal to the current password. * * @param test Word that should be tested * @return true If test is equal to the current password */ public boolean testWord(java.lang.String test) { if (test == INITIAL) { return true; } else { return false; } } /** * Changes this password. * * @param oldpass The current password * @param newpass The new password * @return true if oldpass is equal to the current password and that newpass is an acceptable password */ public boolean setWord(java.lang.String oldpass, java.lang.String newpass) { if (testWord(oldpass) && acceptable(newpass)) { return true; } else { return false; } } }
错误恰好是编译器所说的-您有一个final字段,但没有设置它。
最终字段需要 精确 分配一次。您根本没有分配它。除了文档(“标准初始密码”)外,我们不知道该字段的含义- 大概您想知道一些默认密码。您应该将该值分配给该字段,例如
public static final String INITIAL = "defaultpassword";
另外:您不需要写java.lang.String; 只需使用简称(String)。在代码中使用完全限定的名称很少是一个好主意。只需导入您正在使用的类型,并注意其中的所有内容都会java.lang自动导入。
java.lang.String
String
java.lang
另外:不要使用==; 比较字符串。使用.equals代替。
==
.equals
另外:任何时候只要有这样的代码:
if (condition) { return true; } else { return false; }
你可以这样写:
return condition;
例如,您的acceptable方法可以写成:
acceptable
public boolean acceptable(String suggestion) { return suggestion.length() >= 6 && !suggestion.contains(" "); }