-2
import java.io.*;
import java.util.*;

public class DAOImpl implements DAO
{
    String xs[];
    public String[] readRecord()
    {
        try
        {
            BufferedReader br=new BufferedReader(new FileReader("insurance.db"));
            BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));


            List<String> al1= new ArrayList<String>();
            String next;
            while((next=br.readLine())!=null)
            {
                al1.add(next);
            }
            System.out.println("Enter record number to read:");
        int x=Integer.parseInt(br1.readLine());

        String stream=(al1.get(x-1));

        String[] xs=stream.split(":");
        }

        catch (FileNotFoundException ex)
        {
                    ex.printStackTrace();
            } 
        catch (IOException ex) 
        {
                    ex.printStackTrace();
        }
        return xs;          
    }
    public static void main(String args[])throws Exception
    {
        DAOImpl d=new DAOImpl();

        String as[]=d.readRecord();
        //here compiler saying nullpointerexcdeption

        for(int v=0;v<as.length;v++)
        {
            System.out.println(as[v]);
        }
    }
}

問題は、オブジェクトを宣言してからreadRecord()を呼び出すことにあると思います。主な問題は、readRecord()メソッドに返した配列にあります。オブジェクトを作成してreadRecord()を呼び出すと、String[]内のすべてのデータがとして返されます。しかし、nullPointerExceptionを与えるそのコンパイラを実行していません。

4

2 に答える 2

3
String[] xs=stream.split(":");

この上のタイプを削除します。

xs=stream.split(":");

型宣言を含めると、クラスレベルのフィールドに割り当てるのではなく、tryブロックに対してローカルな同じ名前の新しい変数を作成することになります。これは「シャドウイング」と呼ばれます。

于 2013-03-13T12:42:16.513 に答える
1

String[] xs割り当てる変数はtryブロック内でローカルに宣言されており、クラスフィールドwitchとして宣言されている変数を非表示にしています。行の型宣言String[]を削除しsplitます。

于 2013-03-13T12:45:32.983 に答える