我目前是Java编程的初学者,其任务是“编写和测试Hangman游戏的版本。您的解决方案将涉及一个Hangman类,其构造函数选择一个单词,其猜测方法处理每个猜测的字符。”
但是,我有一个小问题。我的整个代码工作和编译,我已经编写了猜测方法,但我有一个问题编译。我在构造函数中声明了我的实例变量。我在不同的地方使用我的代码中的String变量字,并且它不允许我编译 问题的核心是这个。
public class Hangman{
public Hangman () {
String word = "p u m p k i n";
String blanks = "_ _ _ _ _ _ _";
}
int k = word.length(); ... rest code after this
当我尝试编译它时,它不会让我。它表示变量字为空并显示错误消息。为什么我不能使用word.length()来查找长度的值?是否不可能将构造函数内部声明的变量用作实例变量?最简单的解决方法是在构造函数之外声明我的实例变量(如果我这样做,我的代码完美无缺),但是提示要我选择在构造函数中声明这个单词。为什么我不能使用String这个单词我在构造函数里面声明为“南瓜”来获取k?在我的方法中使用变量空白也不起作用。
那么,这有什么问题?如何将构造函数中声明的变量用作实例变量?或者这不可能吗?为什么我不能使用构造函数中声明的String字或String空格? 谢谢。
答案 0 :(得分:4)
每次在构造函数中创建本地变量。
public Hangman () {
String word = "p u m p k i n";
String blanks = "_ _ _ _ _ _ _";
}
您需要做的是将constructor
中的值分配给成员。
String word;
String blanks;
public Hangman () {
word = "p u m p k i n";
blanks = "_ _ _ _ _ _ _";
}
更多的事情没有意义,没有在构造函数args中获取它们并在构造函数中分配它们。
应该是
public Hangman (String word, String blanks) {
this.word = word;
this.blanks = blanks;
}
答案 1 :(得分:4)
将它们声明为实例变量并在构造函数中初始化它们。如果在构造函数中声明并初始化它们,它们将只能在构造函数(本地作用域)中访问,并且无法在其他地方访问,因此呈现它们是无用的。
private String word;
private String blanks;
public Hangman () {
word = "p u m p k i n";
blanks = "_ _ _ _ _ _ _";
}
// Have setters and getters for word and blanks if possible.
答案 2 :(得分:2)
因为你在构造函数中声明word
,即文本:
String word = "p u m p k i n";
String blanks = "_ _ _ _ _ _ _";
位于public Hangman()
的括号内,构造函数为local
。它只存在于构造函数的范围内。
要解决这个问题,请将变量声明放在外面,如下所示:
public class Hangman{
private String word; //declaring class variables as private
private String blanks; //is a common best-practice
public Hangman () {
word = "p u m p k i n";
blanks = "_ _ _ _ _ _ _";
}
int k = word.length(); ... rest code after this
至于我们为什么要将类变量声明为私有,关于encapsulation的维基百科文章可能会有用。
答案 3 :(得分:1)
您必须执行以下操作
public class Hangman{
private String word;
private String blanks
public Hangman () {
word = "p u m p k i n";
blanks = "_ _ _ _ _ _ _";
}
int k = word.length(); ... rest code after this
所以基本上你必须将变量定义为实例变量而不是局部变量(你已经完成)。如果你想在以后的类中访问它,它的范围应该是这样的,这就是你必须使它成为实例变量的原因。此外,为记录实例变量分配了默认值。