在if-else子句之外无法识别对象

时间:2013-03-25 01:30:25

标签: java

在if-else分支中,我声明了两个具有相同名称的不同PrintStream对象。但是,当我稍后使用PrintStream对象时,编译器会说它“找不到符号”。为什么不看到我创建的对象?该对象使用它声明的if-else分支。这是代码:

System.out.println("Welcome. Would you like to continue a previous adventure, or begin anew?\n(type: new or old)");
status = scan.nextLine();

if(status.equals("new")) {
    System.out.println("What do you call yourself?");
    name = scan.nextLine();

    System.out.println("And what shall be the title of your saga, after you are gone?");
    game = scan.nextLine();

    System.out.println("Very well. Prepare yourself, for this is the beginning of your end...\n...\n...\nAre you ready?");
    status = scan.nextLine();

    System.out.println("Not that it matters. Let us begin.");
    status = scan.nextLine();

    File file = new File(game + ".txt");
    PrintStream print = new PrintStream(file);
    print.println(name);
    old = false;
} else {
    System.out.println("So you're still alive? What was the title of your tale?");
    game = scan.nextLine();

    File file = new File(game + ".txt");
    Scanner gscan = new Scanner(file);
    String save = "";

    while (gscan.hasNextLine()) {
        save += gscan.nextLine();
        save += "\n";
    }

    System.out.println(save);
    PrintStream print = new PrintStream(file);
    print.println(save);

    old = true;
    name = scan.nextLine();
}

if(old) {

}

print.println("beans");

5 个答案:

答案 0 :(得分:3)

您遇到了范围问题。如果要在if-else语句之外使用它,则需要在if-else语句之外声明它。

Java程序中有不同级别的作用域。范围通常由一组花括号定义。但是,还有public,private和protected类型允许使用更多的全局变量,而不仅仅是在括号内。

这些范围中的每一个都可以拥有自己的其他地方无法获得的变量。

答案 1 :(得分:3)

你需要声明变量之外的if语句,然后在两个分支中分配它,如下所示:

PrintStream print;
if (status.equals("new")) {
    ...
    print = new PrintStream(file);
} else {
    ...
    print = new PrintStream(file);
}

更好的是,您可以在file内设置if,然后在条件后创建PrintStream

if (status.equals("new")) {
    ...
} else {
    ...
}
File file = new File(game + ".txt");
PrintStream print = new PrintStream(file);

答案 2 :(得分:1)

看看这两段代码:

String s;
if ( foo ) {
 s = "one";
} else {
 s = "two";
}


if ( foo ) {
 String s = "one";
} else {
 String s = "two";
}

在第一个中,s在if / else之后可用。在第二个中,s仅在{}(if / else块)内可用。每个块碰巧都有一个具有相同名称的变量,但它不是同一个变量。它以后不可用。

答案 3 :(得分:0)

范围内发生的事情仍然在范围内。

if(some condition)
{
  int x = 10;

}

System.out.println(x);

这不起作用,因为x的范围仅限于if块。如果你希望它住在if块之外,那么在if块之外声明它。

答案 4 :(得分:0)

为什么要定义PrintStream print两次?在这种情况下,您只需要在if之外定义一次。