构造函数中的变量?

时间:2013-11-22 07:01:07

标签: java

我目前是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空格? 谢谢。

4 个答案:

答案 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

所以基本上你必须将变量定义为实例变量而不是局部变量(你已经完成)。如果你想在以后的类中访问它,它的范围应该是这样的,这就是你必须使它成为实例变量的原因。此外,为记录实例变量分配了默认值。