2016-07-06 13 views
0

私のif-elseブロックがガンマがヌルであることを検出しないのはなぜですか?ここに私のコードです。これはスプレッドシートアプリケーションであり、これはテーブル内のすべてのセルをループしてファイルに書き出す保存関数です。ここに私のコードです:なぜ私のif elseは正しく機能しないのですか?

public void Save() { 
     String FileName = JOptionPane.showInputDialog("Please enter the name for your file:"); 

     if (FileName == null) { 
      System.err.println("You didn't enter anything"); 
     } else { 
      int rows = Table.getRowCount(); 
      int columns = Table.getColumnCount(); 
      int alpha = 0; 
      int beta = 1; 
      choicer.setCurrentDirectory(new java.io.File("Desktop")); 
      choicer.setDialogTitle("Save Document"); 
      choicer.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      choicer.setAcceptAllFileFilterUsed(false); 
      if (choicer.showSaveDialog(new JPanel()) == JFileChooser.APPROVE_OPTION) { 
       dir = String.valueOf(choicer.getSelectedFile()); 
      } 
      File f = new File(dir + "\\" + FileName + ".txt"); 
      try { 
       fos = new FileOutputStream(f); 
       osw = new OutputStreamWriter(fos); 
       w = new BufferedWriter(osw); 
       for (alpha = 0; alpha <= rows - 1; alpha++) { 
        for (beta = 1; beta < columns; beta++) { 
         String gamma = String.valueOf(Table.getValueAt(alpha, beta)); 
         if (gamma != null) { 
          w.write("<%! " + gamma + " !%> "); 
         } else { 
          w.write(" <%! |^-^| !%> "); 
         }       
        } 
        w.write("\n"); 
       } 
      } catch (IOException e) { 
       System.err.println("Some prob dude. Too big for me"); 
      } finally { 
       try { 
        w.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

私は重複したもので与えられたリンクを試みたが、それは私の問題を解決しません。私がif(gamma != null && !(gamma.isEmpty))を実行すると、nullのみがガンマの値としてファイルに書き込まれます。

+2

おそらく、ガンマはnullではありませんが空ではありませんか?次のようにチェックします。 "gamma!= null &&!gamma.isEmpty()" – W0rmH0le

+1

おそらくコードサンプルを顕著な行に減らし、詳細を追加することができます。 Table.getValueAt()? –

+0

私はそれがオンラインにあなたが 'String.valueOf'に呼び出す前にあるためであるヌル –

答えて

0

たぶん、ガンマが空でなく、nullではない:

変更

if (gamma != null) 

if (gamma != null && !gamma.isEmpty()) 
+0

ガンマ== ""ならば、それは空の権利とはみなされませんか? –

+0

Hummm。私は最初に確認する必要があります...スペースが空の文字列ではないと信じています – W0rmH0le

+1

'isEmpty'のドキュメントは、文字列の長さがゼロに等しいかどうかをチェックするために基本的に省略していることを示しています。それらの長さはゼロではありません。 – JonK

0

に、私はそのことを考えることができる唯一の三つがこれを引き起こすがあります。私は1秒でそれらに行くでしょう。まず、どのIDEを使用していますか?ブレークポイントを設定して変数を監視する機能はありますか?これは、以下のトラブルシューティングに役立ちます。 1.最初のforループヒットを保証できますか? 2.次に、2番目のforループに入っていることを確認します。 3.最後に、文字列の実際の値は何ですか?これはブレークポイントが必要な場所で、変数がnullであると予想しているときにその変数を検査します。あなたはそれがそうでないように見えるでしょう。それはもちろん、あなたのforループがあなたがそこに行こうとしていることを前提としています。

希望すると便利です。

+0

私も@Guilherme Pに同意します。これも非常によく原因になる可能性があります。 –

+0

私のループが動作し、絶対に素晴らしいです –

関連する問題