我正在用Java编程。
我已经为每个方法添加了注释来解释他们应该做什么(根据作业)。我已将我所知道的内容添加到Password.java
(我在研究学校提供的javadoc之后创建的)存根中。
我的问题不是关于几个函数,我知道testWord和setWord中有错误,但我会自己处理。
我的问题是关于这一行:
public static final java.lang.String INITIAL;
这一行是由学校提供的,所以我必须假设它是正确的,我无法找到关于常量字段值INITIAL的任何文档,所以如果有人能提供我的信息那将是惊人的(例如。如何处理?它存储什么?如果有的话?键入?)。 我在Eclipse中的这一行也遇到了错误:
空白的最终字段INITIAL可能尚未初始化
为什么会出现此错误? 提前感谢您的评论。
FYI来自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;
}
}
}
答案 0 :(得分:21)
错误正是编译器所说的错误 - 你已经有了一个最终字段,但没有设置它。
需要将最终字段分配给完全一次。你根本没有分配它。我们不知道该字段在文档之外的代表意味着什么("标准初始密码") - 可能有一些您想知道的默认密码。您应该将该值分配给该字段,例如
public static final String INITIAL = "defaultpassword";
另外:你不需要写java.lang.String
;只需使用短名称(String
)。在代码中使用完全限定名称很少是一个好主意;只需导入您正在使用的类型,并注意java.lang
中的所有内容都会自动导入。
另外:don't compare strings using ==
; use .equals
instead。
此外:任何时候你都有这样的代码:
if (condition) {
return true;
} else {
return false;
}
你可以写:
return condition;
例如,您的acceptable
方法可以写为:
public boolean acceptable(String suggestion) {
return suggestion.length() >= 6 && !suggestion.contains(" ");
}
答案 1 :(得分:0)
您根本不会为常量变量赋值,因为常量变量需要分配一次
public static final java.lang.String INITIAL;
更改为
例如:
public static final java.lang.String INITIAL ="initial";
将变量声明为常量
在声明变量时,我表明很容易为a赋值 int变量:
int numberOfHoursInADay = 24; 我们知道这个价值永远不会 改变现实世界,以确保它不在程序中。 这是通过添加关键字修饰符final:
来完成的final int NUMBER_OF_HOURS_IN_A_DAY = 24;
除了最后的关键字,你应该注意到这个案例 根据标准,变量名称已更改为大写 Java命名约定。这使得更容易发现哪个 变量是代码中的常量。
如果我们现在尝试更改NUMBER_OF_HOURS_IN_A_DAY的值:
final int NUMBER_OF_HOURS_IN_A_DAY = 24; NUMBER_OF_HOURS_IN_A_DAY = 36;我们将从编译器中得到以下错误:
无法为最终变量NUMBER_OF_HOURS_IN_A_DAY分配值 任何其他原始数据类型变量都是如此。要做 将它们添加到常量只需将最终关键字添加到其声明中。
另一个错误:
if(test == INITIAL){
您必须使用equals()
比较两个字符串
<强>为什么强>
equals()
比较您正在寻找的内容
==
比较引用是否引用查看相同的位置
答案 2 :(得分:0)
我没有在提供的Password.java中看到静态最终INITIAL被分配的任何地方。这一定是问题所在。