2011-02-05 148 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"。也許這是你的錯誤,但我把它留下了,因爲你有它。