0
if (current.leftChild.iData != '+' && current.rightChild.iData != '+')  

このコード行では、現在のノードの leftChild と現在のノードの rightChild の両方が == '+' または文字のプラス記号であるかどうかを確認しようとしています。どちらかがそうでない場合 = 文字 + i 他のコードを実行したい。この行と、このコード行を呼び出すために使用するメソッドに対して null ポインター例外が発生しています。iData はノード内の単なる情報です。

4

5 に答える 5

7

次のいずれかのケースを意味する null ポインター例外が発生している場合。
1. 現在はヌルです。
2. leftChild はヌル/ rightChild はヌルです。
3. iData が null です

しかし、あなたは多くの詳細を提供していないので。私はあなたを助けることができません。

于 2012-04-10T21:35:46.513 に答える
2

または(またはcurrent.leftChildそれ自体) が正しく設定されておらず、 です。のメンバーにアクセスしようとすると、.current.rightChildcurrentnullnullNullPointerException

于 2012-04-10T21:35:55.947 に答える
1

currentcurrent.leftChildまたはcurrent.rightChildである場合、nullが得られますNullPointerException。最初に null チェックを実行する必要があります。

于 2012-04-10T21:34:46.783 に答える
0

ブレークポイントを使用して、current.leftChild.iData と current.rightChild.iData の値を確認します。または、次のように記述できます。

System.out.println("leftChild: " + current.leftChild.iData);

System.out.println("leftChild: " + current.rightChild.iData);

コードのどこかで値が null に設定されているため、これらの値の変更を確認する必要があります。それらが null になると、それらのオブジェクトが存在しなくなるため、システムは NullPointerException を返します。

于 2012-04-10T23:54:53.973 に答える
0

まず最初に、その各部分を印刷して、何がヌルかを調べてみてください。問題を引き起こしている部分に到達すると、NPE を取得する必要があります。これにより、左右が別々の障害に分かれます。これらの別々の行を作成し、両方が失敗した場合、最初の行でのみ失敗することに注意してください。

今:

if (current.leftChild.iData != '+' && current.rightChild.iData != '+') >このコード行について、現在のノードの leftChild と >現在のノードの rightChild をチェックしようとしていますboth == '+' または文字プラス記号。>どちらでもない場合 = 文字 + i 他のコードを実行したい

あなたが書いたコードは、(例外をスローしないと)あなたが望んでいることをテストしません。どちらかが != から '+' かどうかを確認したいと言っていましたが、このコードは両方が != '+' であるかどうかのみをテストするため、キャッチするつもりだったと思われるいくつかの条件が欠落しています。実際、どちらかが「+」と等しくない場合に他のコードを実行したい場合は、

if (current.leftChild.iData == '+' && current.rightChild.iData == '+')
{
    //code you execute if both are equal to '+'
}
else
{
    //code you execute if either (or both) is not equal to '+'
}
于 2012-04-11T18:30:09.023 に答える