2016-07-06 1 views
0

왜 if-else 블록이 감마가 null을 감지하지 못합니까? 여기 내 코드가있다. 스프레드 시트 응용 프로그램이며 테이블의 모든 셀을 반복하여 파일에 기록하는 저장 기능입니다. 여기 내 코드 :if if else is not가 제대로 작동합니까?

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

@BrianAgnew 누군가가 여분의 유효 기간을 원할 수도 있기 때문에 모든 코드를 추가했습니다 –

답변

0

어쩌면, 감마는 비어 있지만 null이 아닌 :

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

감마 == ""인 경우 비어있는 것으로 간주되지 않습니까? –

+0

Hummm. 처음에 확인해야합니다. 나는 공백이 빈 문자열이 아니라고 생각한다. – W0rmH0le

+1

'isEmpty'에 대한 문서는 기본적으로 문자열의 길이가 0인지 검사하는 것을 의미한다. - 아니요. 공백으로 구성된 문자열은 공백으로 간주되지 않기 때문에 그들은 길이가 0이 아닙니다. – JonK

0

이 원인이 내가 그 생각할 수있는 유일한 세 가지가 있습니다으로

변경

if (gamma != null) 

. 나는 잠시 후에 그 사람들에게 갈 것이다. 먼저, 어떤 IDE를 사용하고 있습니까? 중단 점을 설정하고 변수를 볼 수 있습니까? 이렇게하면 다음 문제를 해결하는 데 도움이됩니다. 1. 첫 번째 for 루프 검색을 보장 할 수 있습니까? 2. 그런 다음 두 번째 for 루프에 들어가는 지 확인하십시오. 3. 마지막으로 감마 문자열의 실제 값은 무엇입니까? 여기서 중단 점이 필요하고 변수가 null이 될 것으로 예상 할 때 변수를 검사합니다. 당신은 그렇지 않다는 것을 알 것입니다. 그건 물론, for 루프가 심지어 당신이 거기에 가게하는 것을 가정한다고 가정합니다.

희망이 도움이됩니다.

+0

또한 @Guilherme P와 마찬가지로 동의합니다. 이것도 원인 일 수 있습니다. –

+0

내 루프가 작동하며 절대적으로 좋습니다. –

관련 문제