GOF本のStrategyのJava版での質問です。
下記を実行すると、クラスCompositionのbreakCountの関数を実行した所で、NullPointerExceptionが発生してしまいます。(SimpleCompositorのcomposeの戻り値である1を期待しているのですが?)お分かりになる方、御教示ください。
//ここから
public class Main {
public static void main(String[] args) {
Composition quick = new Composition(new SimpleCompositor());
quick.repair();
}
}
class Composition {
public Composition(Compositor c) {
_components = new Vector();
_lineBreaks = new Vector();
}
public void repair() {
Hashtable natural = new Hashtable();
Hashtable stretchability = new Hashtable();
Hashtable shrinkability = new Hashtable();
int componentCount;
Hashtable breaks = new Hashtable();
// 初期化
componentCount = 0;
_lineWidth = 0;
natural.put("natural1", new Integer(0));
stretchability.put("stretchability1", new Integer(0));
shrinkability.put("shrinkability1", new Integer(0));
breaks.put("breaks1", new Integer(0));
// ブレーク位置を決める
int breakCount;
breakCount = _compositor.compose(
natural, stretchability, shrinkability,
componentCount, _lineWidth, breaks
);
//
System.out.println(breakCount);
}
private Compositor _compositor;
private Vector _components;
private int _componentCount;
private int _lineWidth;
private Vector _lineBreaks;
private int _lineCount;
}
abstract class Compositor {
public Compositor() {
}
public abstract int compose(
Hashtable natural, Hashtable stretch, Hashtable shrink,
int componentCount, int lineWidth, Hashtable breaks );
}
class SimpleCompositor extends Compositor {
public SimpleCompositor() {
}
public int compose(
Hashtable natural, Hashtable stretch, Hashtable shrink,
int componentCount, int lineWidth, Hashtable breaks ) {
// ...
return 1;
}
}
No.2ベストアンサー
- 回答日時:
_compositorをインスタンス化してないのでnullで当然です。
No.1さんも同様のことを言っていると思います。Mainクラスで
>new Composition(new SimpleCompositor())
としていますが、CompositionクラスのコンストラクタでCompositorはどこにも設定してません。
ここで_compositorに代入するんじゃないのですか?
なんだか前回の質問と同じような内容な気が・・・
この回答への補足
すいません。
_compositorを実装クラスでオーバーライドする所が抜けていました。
public Composition(Compositor c) {
_compositor = c;
// ...
}
すいません。。。書き方の問題で、見落としていました。
以後、気をつけます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java final 1 2022/06/10 22:49
- Java Java 配列<選挙> 4 2023/07/31 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
C# 矢印キーの取得
-
C#でキーイベントが発生しない...
-
C# WinForm のDataGridView Cel...
-
デスクトップマスコットのドラ...
-
【C#】ソースコードをファイル...
-
Java 他クラスの呼び出しが上手...
-
LVM_SETITEMSTATEでListViewの...
-
C# DataGridView列カスタマイズ
-
Processingでマウスクリックで...
-
C#から、C++で作成したdll内の...
-
C#でのWNetAddConnection3の使...
-
staticな有効範囲の配列の作り...
-
IF関数でEmpty値を設定する方法。
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
System.out.printlnの意味がよ...
-
1~100までの数字を表示し、か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
C#で、あるクラスのメンバーす...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
unityでのC++エラーの原因がわ...
-
ボタンの複数割り当てについて
-
C#で別のFormへ複数の値を返そ...
-
エンターキーを押すとOKボタン...
-
LVM_SETITEMSTATEでListViewの...
-
ユーザーコントロールを動的に...
-
[C#.net]スレッド化された別フ...
-
C# 矢印キーの取得
-
C#から、C++で作成したdll内の...
-
C# DataGridView列カスタマイズ
-
C#でキーイベントが発生しない...
-
Thread.sleepのInterruptedExce...
-
C#でのオブジェクトのコピーに...
-
C# 半角カナの文字化けについて
-
文字列の置換
おすすめ情報