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,他们被认为是不同的。谢谢