2017-10-13 8 views
0

複合パターンを作成中です。私はcsvファイルからデータを受け取り、木のような構造でそれを印刷しなければならないプログラムを持っています。それは、ファイルにはルートにある大統領があります。社長の従業員IDはManagerの指定IDになります。したがって、マネージャの従業員IDは、アナリスト、係員、セールスマンを含む残りの従業員の指定IDになります。そのような木です。しかし、私は障害に気付いています。ラインで :複合パターンを実装する際の置換に問題があります

if (valueOfPresident == Integer.valueOf(b[3]).intValue()) 

他の従業員の指定idを持つ社長の従業員IDを比較しながら、それが遭遇はNULL (7839、 'KING'、 '大統領、NULL、'17 -NOV-81です'、' MANAGER '、7839、' 1-MAY-81 '、2850、NULL、30) - > (7698、' MANAGER '、7839、' MAY-81 '、5000、NULL、10) 。 そのため、例外が発生しています。

Exception in thread "main" java.lang.NumberFormatException: For input string: "NULL" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.valueOf(Unknown Source) 
    at com.techlabs.compositepattern.project.CompositePattern.main(CompositePattern.java:34) 

NULL値を0に置き換えるにはどうすればよいですか?

プログラムコードがある -

while ((line = br.readLine()) != null) { 

     String[] b = line.split(","); 

     if (b[3].equalsIgnoreCase("NULL")) { 
      TopHierarchy tophierarchy = new TopHierarchy(b); 

      valueOfPresident = (Integer.valueOf(b[0]).intValue()); 

      tophierarchy.showDetails(); 
      if (b[3].contains("NULL")) 
      b[3].replace("NULL", "0000"); 


      if (valueOfPresident == Integer.valueOf(b[3]).intValue()) { 
      TopHierarchy tophierarchy1 = new TopHierarchy(b); 
       tophierarchy.add(tophierarchy1); 
       tophierarchy.showDetails(); 
       valueOfManager = Integer.valueOf(b[0]).intValue(); 

答えて

0

あなたはこのif文があります。

if (b[3].equalsIgnoreCase("NULL")) { 

あなたはそれの内側にある場合、Bをチェックする必要はありませんが、[3]。あなたはそれが "NULL"であることを知っているので、2つのif文を削除することができます。

+0

次に、マネージャをチェックして他の従業員から隔離する方法を教えてください。従業員IDがマネージャの指定IDであるかどうかを確認する必要があります。ファイルからの抜粋のように: 'BLAKE'、 'MANAGER'、7839、 '1-MAY-81'、2850、NULL、30 and 7839、 'KING'、 'PRESIDENT'、0000、'17 -NOV-81 '、5000、NULL、10。ここでManager - 7839の指定IDは大統領の場合の従業員 - 7839 –

0

これは何もしません:

b[3].replace("NULL", "0000"); 

文字列は不変です。 replaceメソッドは、新しい文字列を返します。

b[3] = b[3].replace("NULL", "0000"); 

しかし、b [3]が "NULL"に等しいことをすでにチェックしているブロック内でこれを呼び出しています。したがって、その前にif (b[3].contains("NULL"))を置く必要はありません。

+0

私はb [3] == NULLを数値に変換して置き換える必要があります。 –

+0

私は知っています。それで私の答えが言うことをしてください。 – DodgyCodeException

関連する問題