Java if语句

Java if语句,java,if-statement,Java,If Statement,为什么这段代码的最后一行没有拾取代码中的字符串filename if (ressound == R.id.sound1) { String filename = "sound1" + ".ogg"; } else { String filename = "sound1" + ".ogg"; } boolean exists = (new File(path)).exists(); if (!exists) { new File(path).mkdirs(); } F

为什么这段代码的最后一行没有拾取代码中的字符串
filename

if (ressound == R.id.sound1) {
    String filename = "sound1" + ".ogg";
} else {
    String filename = "sound1" + ".ogg";
}
boolean exists = (new File(path)).exists();   
if (!exists) { new File(path).mkdirs(); }   

FileOutputStream save;
try { 
    save = new FileOutputStream(path + filename);  

您正在if-else分支的作用域中声明变量。在此范围之外,无法访问变量

改用这个:

String filename;
    if (ressound == R.id.sound1) {
           filename="sound1"+".ogg";
       } else{
            filename="sound1"+".ogg";
       }
             boolean exists = (new File(path)).exists();   
             if (!exists){new File(path).mkdirs();}   

             FileOutputStream save;
             try { 
              save = new FileOutputStream(path+filename);  

您的代码甚至无法编译,因为您声明的
filename
变量都超出了创建FileOutputStream的范围

我会这样做:

private String getFilename() {
    if (ressound == R.id.sound1) {
        return "sound1"+".ogg";
    }
    return "sound1"+".ogg";
}
然后从其他方法调用它:

boolean exists = (new File(path)).exists();   
if (!exists){ new File(path).mkdirs(); }   

FileOutputStream save;
try { 
    save = new FileOutputStream(path+getFilename()); 

正如我在上面的评论中所说的,我不知道为什么在这两种情况下为filename指定相同的值,如
getFilename()
总是返回
“sound1.ogg”
。也许那是你的错误,但我把它留给了你。

顺便说一句,我现在看到机器人分支也在做同样的事情。这可能是问题所在``只要在两个分支(if和else块)中为其赋值,就不需要将
文件名
初始化为
”。您可以使用
字符串文件名单独。看到一个初始化的值会让我期望它不会被更改。是的,这是真的。我会更改它。您也会希望修复缩进,因为正确的缩进和格式使您和我们调试代码更加容易。奇怪的是,您在这两种情况下都将文件名设置为“sound1”+“.ogg”,那么为什么要用if-else呢?我认为更奇怪的是,你似乎把两个字符串连在一起,你可以把它们放在一个字符串中。您现在的操作方式在内部调用了一个
StringBuilder
,如果您将它作为一个字符串(如
string filename=“sound1.ogg”
),则不需要它。另外,感谢您的选择。我只是复制粘贴了试图运行if语句的行。所以变量是一样的。obv,他们被认为是不同的。谢谢