-3

このコードの一部は、Xを新しいフォーマッター変数として初期化します。

 private Formatter X;
     public void Create() {
                    try{
                        X = new Formatter("users.txt");
                        X.format("%1$20s %2$20s %3$20s %4$20s %5$20s %6$20s %7$20s %8$20s %9$20s \n","Firstname","Lastname","Password","ID","Addressln1","Addressln2","Addressln3","EstimatedValue","Tax Owed");
                        System.out.println("Due to there not being any users file present one has been created.");
                    }
                    catch(Exception e){
                        System.out.println("There is a users file present so i will not create another one.");
                    }
                }
            }

これは私が問題を抱えているコードの一部です。X.formatビットで、nullポインターエラーが発生し続け、それを修正するためにあらゆることを試みました。

public void WriteToFilecmd(){
                Scanner input = new Scanner(System.in);
                System.out.println("Please enter your First name");
                String Fname = input.next();
                System.out.println("Please enter your Last name");
                String Lname = input.next();
                System.out.println("Please enter your Password");
                String Password = input.next();
                System.out.println("Please enter your user ID");
                String ID = input.next();
                System.out.println("Please enter the first address line of your Property");
                String addressln1 = input.next();
                System.out.println("Please enter the second address line of your Property");
                String addressln2 = input.next();
                System.out.println("Please enter the third address line of your Property");
                String addressln3 = input.next();
                System.out.println("Please enter the properties estimated market value");
                String EstimatedPropertyValue = input.next();
                System.out.println("Please enter your tax owed");
                String Taxowed = input.next();
                input.close();
                X.format("%1$20s %2$20s %3$20s %4$20s %5$20s %6$20s %7$20s %8$20s %9$20s \n",Fname,Lname,Password,ID,addressln1,addressln2,addressln3,EstimatedPropertyValue,Taxowed);


    }
4

3 に答える 3

0

X(それが何であれ)が初期化されていることを確認してください。

意味がわからない場合の例:

Scanner scanner; // not initialized
Scanner scanner = new Scanner(System.in); // initialized

ただし、宣言で変数を初期化する必要はありません。これにより、変数も初期化されます。

Scanner scanner; // not initialized
scanner = new Scanner(System.in); // good job you init'd it!

「new」を使用して変数を設定しないと、nullpointerexception が発生します。WriteToFilecmd を呼び出す前に、必ずこれを行ってください。

明らかに、x 変数を「new Scanner(System.in)」に設定しないでください。X の型のコンストラクターを呼び出します。

于 2012-11-22T02:16:44.497 に答える
0

NullPointerExceptionライン上

X.format("%1$20s %2$20s %3$20s %4$20s %5$20s %6$20s %7$20s %8$20s %9$20s \n",Fname,Lname,Password,ID,addressln1,addressln2,addressln3,EstimatedPropertyValue,Taxowed);

Xそれ自体が null であるか、メソッドがそれをスローすることを意味します。通常、Java Foundation クラスはnull引数を適切に処理し (Scanner#next()とにかく null を返さない)、バグを含んでいないため、現時点ではそれが使用されているX可能性が最も高いです。null

これは、createメソッドが例外をキャッチした場合 (コンソール出力を参照)、X後で上書きした場合、createまたはメソッドをまったく呼び出さないか呼び出しが遅すぎた場合に発生する可能性があります。

また、ポケモンの例外処理 (「すべて捕まえる必要がある」などcatch(Exception e)) は悪い習慣であることに注意してください。釣れるものではなく、扱えるものを釣る。

于 2012-11-22T02:19:25.320 に答える
0

次の行に注意してください。

X.format("%1$20s %2$20s %3$20s %4$20s %5$20s %6$20s %7$20s %8$20s %9$20s \n",Fname,Lname,Password,ID,addressln1,addressln2,addressln3,EstimatedPropertyValue,Taxowed);

変数はどこXから来ますか?このメソッド (おそらくクラス) よりも高いレベルで定義されている場合、その値は であり nullnullを逆参照することはできません。

于 2012-11-22T02:12:23.453 に答える