在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");
答案 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
之外定义一次。