2012-03-26 3 views
-1

私は3つのクラスを作成し、ユーザーインターフェイスに使用する4番目のクラスを与えられています。あるクラス(DBBinding)はStringキーとString値を持ち、Alienやstar:harry deanという名前をとり、名前や星を「キー」にし、もう1つを次のクラス(DBrecord )は、これらの「バインディング」のグループを1つのレコードとして保持することです。これらのバインディングのグループをArrayListに保持することを選択しました。 3番目のクラス(DBTable)は、もう1つのArrayListですが、私はtxtの各行が正しいフォーマット(key:value、key:value、key:value、and so)であることがわかっているDBrecordの1つになるファイルからtxtの行を読み込んでいます。に)。ヌルポインタ例外を取得する複数のクラスの使用。おそらく構文的だろう。

問題が発生している場所は、DBrecordクラス内です。私はここでDBrecordクラス内から(public static DBrecord createDBrecord(String record))呼び出されるメソッド(private void addBindingToRecord(String key_、String value_))を各メソッドコードとしています。 addBindingToRecordメソッドで問題が発生しました...初めて使用されたときにnullポインタ例外が発生しました。 ...同じ結果でそれを複数の方法を試してみました....

public static DBrecord createDBrecord(String record)//takes a string and breaks it into DBBindings and makes a record with it. 
{ 
    DBrecord myRecord=new DBrecord(); 
    String temp[]; 
    temp=record.split(",",0); 

    if(temp!=null) 
    { 
    for(int i=0; i<Array.getLength(temp); i++) 
    { 
     System.out.println("HERE");//for testing 

     String temp2[]; 
     temp2=temp[i].split(":",0); 
     myRecord.addBindingToRecord(temp2[0], temp2[1]); 
    } 
    } 
    return myRecord; 
} 



private void addBindingToRecord(String key_, String value_) 
{ 

    DBBinding myDBBinding=new DBBinding(key_, value_); 

    if(myDBBinding!=null)//////////////ADDED 
    this.myDBrecord.add(myDBBinding);///Here is where my null pointer exception is. 

} 

私はつもりです。「this.myDBrecord.add(myDBBinding)」私はそれがsytaxとどのように私は呼び出していますに関係していると思いますあなたが見なければならないように、ここにすべてのクラスの完全なコードを投稿してください。助け、ヒント、アイデアをありがとう。

あなたのコンストラクタで
package DataBase; 
import java.io.*; 

public class CommandLineInterface { 
    public static void main(String[] args) { 

     DBTable db = new DBTable(); // DBTable to use for everything 

     try { 
      // Create reader for typed input on console 
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
      String line; 

      while (true) { 
       int length = 0; 
       int selectedLength = 0; 
       // YOUR CODE HERE 


       System.out.println("\n" + length + " records (" + selectedLength + " selected)"); 
       System.out.println("r read, p print, sa select and, so select or, da ds du delete, c clear sel"); 
       System.out.print("db:"); 
       line = reader.readLine().toLowerCase(); 

       if (line.equals("r")) { 
        System.out.println("read"); 
        String fname; 
        System.out.print("Filename:"); 
        //fname = reader.readLine();////ADD BACK IN AFTER READ DEBUGED 
        // YOUR CODE HERE 
        fname="movie.txt"; 
        db.readFromFile(fname); 




       } 
       else if (line.equals("p")) { 
        System.out.println("print"); 
        // YOUR CODE HERE 

        DBTable.print(); 


       } 
       else if (line.equals("da")) { 
       System.out.println("delete all"); 
        // YOUR CODE HERE 
       } 
       else if (line.equals("ds")) { 
        System.out.println("delete selected"); 
        // YOUR CODE HERE 
       } 
       else if (line.equals("du")) { 
        System.out.println("delete unselected"); 
        // YOUR CODE HERE 
       } 
       else if (line.equals("c")) { 
        System.out.println("clear selection"); 
        /// YOUR CODE HERE 
       } 
       else if (line.equals("so") || line.equals("sa")) { 
        if (line.equals("so")) System.out.println("select or"); 
        else System.out.println("select and"); 

        System.out.print("Criteria record:"); 
        String text = reader.readLine(); // get text line from user 
        // YOUR CODE HERE 
       } 
       else if (line.equals("q") || line.equals("quit")) { 
        System.out.println("quit"); 
        break; 
       } 
       else { 
        System.out.println("sorry, don't know that command"); 
       } 
      } 
     } 
     catch (IOException e) { 
      System.err.println(e); 
     } 
    } 
} 




package DataBase; 

import java.util.*; 
import java.io.*; 

public class DBTable { 

    static ArrayList<DBrecord> myDBTable; 


    public DBTable() 
    { 
     ArrayList<DBrecord> myDBTable= new ArrayList<DBrecord>(); 

    } 


    public static void addRecordToTable(DBrecord myRecord)//added static when added addRecordToTable in readFromFile 
    { 
     if(myRecord!=null) 
     {myDBTable.add(myRecord);} 

    } 


    public static void readFromFile(String FileName) 
    { 
    try 
    { 
     FileReader myFileReader=new FileReader(FileName); 

     String line="Start"; 
     BufferedReader myBufferdReader=new BufferedReader(myFileReader); 

     while(line!="\0") 
     { 

      line=myBufferdReader.readLine(); 


      if(line!="\0") 
      { 
      System.out.println(line);//TEST CODE 
      addRecordToTable(DBrecord.createDBrecord(line));// made addRecordToTable static. 
      } 

     } 


    }catch(IOException e) 
    {System.out.println("File Not Found");} 




    } 





public static void print() 
{ 
    if (myDBTable==null) 
    { 
     System.out.println("EMPTY TABLE"); 
     return; 
    } 
    else 
    { 
    for (int i=0; i<myDBTable.size(); i++) 
    { 
     System.out.println(myDBTable.get(i).toString()); 
    } 
    } 
} 


} 





package DataBase; 

import java.util.*; 
import java.lang.reflect.Array; 

//import DataBase.*;//did not help ... ? 

public class DBrecord { 

    boolean select; 
    String key; 
    //need some type of collection to keep bindings. 
    ArrayList<DBBinding> myDBrecord; 


    public DBrecord() 
    { 
     //DBrecord myRecord=new DBrecord(); 
     select=false; 
     ArrayList<DBBinding> myDbrecord=new ArrayList<DBBinding>(); 
    } 

    private void addBindingToRecord(String key_, String value_) 
    { 



     DBBinding myDBBinding=new DBBinding(key_, value_); 

     //System.out.println(myDBBinding.toString());//for testing 

     if(myDBBinding!=null)//////////////ADDED 
     this.myDBrecord.add(myDBBinding); 

     System.out.println(key_);//for testing 
     System.out.println(value_);//for testing 
    } 

    public String toString() 
    { 
     //out put key first then all values in collection/group/record. use correct formatting. 

     StringBuilder myStringbuilder=new StringBuilder(); 


     for (int i=0;i<this.myDBrecord.size();i++) 
     { 
      myStringbuilder.append(myDBrecord.get(i).toString()); 
      myStringbuilder.append(", "); 
     } 

     myStringbuilder.delete(myStringbuilder.length()-2, myStringbuilder.length()-1);//delete last ", " thats extra 
     return myStringbuilder.toString(); 
    } 



    public static DBrecord createDBrecord(String record)//takes a string and breaks it into DBBindings and makes a record with it. 
    { 
     //System.out.println("HERE");//for testing 
     DBrecord myRecord=new DBrecord(); 
     String temp[]; 
     temp=record.split(",",0); 

     if(temp!=null) 
     { 
      //System.out.println("HERE");//for testing 
      //for(int i=0; i<Array.getLength(temp); i++) ///for testing 
      //{System.out.println(temp[i]);} 
     for(int i=0; i<Array.getLength(temp); i++) 
     { 
      System.out.println("HERE");//for testing 

      String temp2[]; 
      temp2=temp[i].split(":",0); 

       System.out.println(temp2[0]);//for testing 
       System.out.println(temp2[1]);//for testing 

      myRecord.addBindingToRecord(temp2[0], temp2[1]); 
      System.out.println(temp2[0]+ "  "+ temp2[1]);////test code 
     } 
     } 
     return myRecord; 
    } 


} 





package DataBase; 

public class DBBinding { 

    private String key; 
    private String value; 

    public DBBinding(String key_, String value_) 
    { 
     key =key_; 
     value=value_; 
    } 


    public String getKey() 
    {return key;} 

    public String getValue() 
    {return value;} 

    public String toString() 
    {return key+": "+value;} 

} 
+0

は 'temp'配列の値は何ですか? –

+0

'myDBRecord'を初期化する必要がありますか、または初期化や' new'を使わずにメソッドを呼び出すための公正なゲームですか? – sarnold

答えて

1

ArrayList<DBBinding> myDbrecord=new ArrayList<DBBinding>();

あなただけmyDbrecordという名前のローカル変数を作成して、代わりにフィールドmyDBrecordを初期化するのは、それを初期化します。

おそらく代わりたかった:nullポインタ例外が発生したときに

myDBrecord = new ArrayList<DBBinding>(); 
+0

私は前の1つでこれをやったことがあります。私はチェックして、あなたと一緒に戻ってきます。 –

+0

私のdbtableクラスのコンストラクタにも同じ問題がありました。 –

+0

@aaronburns:自分で見つけることができたという事実は、問題の内容を理解し、これが素晴らしいことを意味します。残りのあなたとの幸運。 – amit

関連する問題