使用多个类获取Null指针异常。可能是句法上的。

时间:2012-03-26 00:37:08

标签: java

所以我应该制作3个类,并给予第4个类用于用户界面。一个类(DBBinding)应该有一个String键和String值,并采取类似名称:Alien或star:harry dean和make name或star是“key”,另一个是“value”下一个类(DBrecord) )是将一组这些“绑定”作为一个记录。我选择在ArrayList中保留一组这些绑定。第三个类(DBTable)是另一个ArrayList但是。我正处于从文件中读取一行txt的位置,其中每行txt将成为一个我们知道格式正确的DBrecord(键:值,键:值,键:值等等)上)。

我遇到麻烦的地方在DBrecord课程中。我有一个方法(private void addBindingToRecord(String key_,String value_))从DBrecord类中调用(public static DBrecord createDBrecord(String record))这里是每个方法代码。 我在使用addBindingToRecord方法时遇到问题...它在第一次使用时出现空指针异常。我认为它与sytax有关,我如何调用“this.myDBrecord.add(myDBBinding);”......已经尝试了多种方法,结果相同....

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.

}

我将在这里发布我所有课程的完整代码,以便在需要时查看。感谢任何帮助,提示,想法。

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;}

}

1 个答案:

答案 0 :(得分:1)

在您的构造函数中:ArrayList<DBBinding> myDbrecord=new ArrayList<DBBinding>();

您只需创建一个名为myDbrecord的局部变量并对其进行初始化,而不是初始化字段myDBrecord

你可能想要:

myDBrecord = new ArrayList<DBBinding>();