2011-02-05 144 views
0

这段代码的最后一行怎么没有在代码中拾取字符串filenameJava if语句

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); 
+0

由于正确的缩进和格式设置使您和我们都可以更轻松地调试代码,因此您也需要修正缩进。 – 2011-02-05 21:22:37

+2

奇怪的是,在这两种情况下,您都将文件名设置为“sound1”+“.ogg”,那么为什么还要有一个if-else呢? – Alb 2011-02-05 21:25:06

+1

我认为更奇怪的是,你似乎把两个字符串连接起来,你可以简单地把它放在一个字符串中。你现在在做的方式现在在内部调用一个`StringBuilder`,如果你把它作为一个字符串,就像这样`String filename =“sound1.ogg”`,那么这将不是必需的。 – 2011-02-05 21:33:26

回答

13

你正在声明变量在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); 
3

您的代码,因为它甚至不会编译因为你已经声明要灭了,在那里你创建FileOutputStream中两个范围变量filename

我这样做:

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()); 

正如我在评论说过上面,我不知道为什么你分配在两种情况下文件名都相同,如getFilename()总是返回"sound1.ogg"。也许这是你的错误,但我把它留下了,因为你有它。