- 締切済み
H21年春期基本情報技術者午後問11(JAVA)
H21年春期基本情報技術者午後問11(JAVA)で、 [プログラム2]の 引数textに格納される物が分かりません。 分かる方、教えて下さい。 //プログラム1 class GapBuffer { private static final int INITIAL_GAP_SIZE = 128; private char[] buffer; private int gapOffset = 0; private int gapSize = INITIAL_GAP_SIZE; GapBuffer(String initialText){ buffer = new char[initialText.length() + gapSize]; System.arraycopy(initialText.toCharArray(), 0, buffer, gapSize, initialText.length()); } void insert(int offset, char ch) { confirmGap(offset); buffer[gapOffset++] = ch; gapSize--; } void delete(int offset){ if (length() == 0) return; confirmGap(offset + 1); gapOffset--; gapSize++; } char charAt(int offset) { if (offset >= gapOffset) offset += gapSize; return buffer[offset]; } int length() { return buffer.length - gapSize ;} private void confirmGap(int newGapOffset){ if (gapSize == 0) { char[] temp = new char[buffer.length + INITIAL_GAP_SIZE]; System.arraycopy(buffer, 0, temp, 0, buffer.length); gapOffset = buffer.length; gapSize = INITIAL_GAP_SIZE; buffer = temp; } if(newGapOffset < gapOffset) { System.arraycopy(buffer, newGapOffset, buffer, newGapOffset + gapSize, gapOffset - newGapOffset); } else { System.arraycopy(buffer, gapOffset + gapSize, buffer, gapOffset, newGapOffset - gapOffset); } gapOffset = newGapOffset; } } /プログラム2 class Editor { private GapBuffer buf; private int cursor = 0; private Editor(String text) { buf = new GapBuffer(text);←此処です } private void run() { Display.output(buf, cursor); char ch; while ((ch = CharReader.get()) != CharReader.EOF) { switch (ch){ case CharReader.MOVE_FORWARD: moveCursor(1); break; case CharReader.MOVE_BACKWARD: moveCursor(-1); break; case CharReader.DELITE: if (cursor < buf.length()) { buf.delete(cursor); } break; default: buf.insert(cursor++, ch); break; } Display.output(buf, cursor); } } private void moveCursor(int n) { int newCursor = cursor + n; if (newCursor >= 0 && newCursor <= buf.length()) { cursor = newCursor; } } public static void main(String[] args) { Editor editor = new Editor(args[0]); editor.run(); } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- choconamacream
- ベストアンサー率44% (152/338)
誰も来ませんね・・・。(たぶん、Javaカテだと、いろいろと相手をしてくださる方がいると思いますが。) いつもは一番手を控えているのですが、試験も直前ということもあり、今回は私が可能な範囲でアドバイス。 てっきり、Eclipseとかでコマンドライン引数を指定しての実行とかが分からないのかなと思っていたのですが、そうじゃなく、そもそもコンパイル自体が通りませんね。 問題文に書かれていた、「外部で与えられるクラス『CharReader』や『Display』」というのは、標準のクラスライブラリではなく、独自のクラス群です。 よって、import文をいくつか追加したらOKではなく(JDK5や6のAPIリファレンスにも載っていなかった)、独自にその2つのクラスを実装しないと、「ギャップバッファを利用した簡易テキストエディタ」のJavaプログラムをコンパイル・実行することは不可能でしょう。 この辺りに関しては、過去問とかで利用する人もいるんだし、ちゃんと全てのソースプログラムを載せといてよ、って思うんですが、逆に言うと、コードが冗長的で長くなることを避け、受験者への配慮も込めて、わざと必要な所のみ掲載したとも取れるのですが。(実際の所は、う~ん、どうなんだろう?) 雑談はさておき(論評にもなっていない、単なる独り言です、はい)、今回の質問へのアドバイスとしては、ずばり 「コンストラクタがいつ、どのように処理されているのか?」 がポイントですね。それぞれのクラスごとに、1つずつでオーバーロードされていませんし、すごくシンプルですね。 おあと、コマンドライン引数などに関しても分かり兼ねるようでしたら、以下の過去ログなんかも参考にしてみてください。 「public static void main (String args[])」 http://oshiete1.goo.ne.jp/qa1876924.html もし、クラス「CharReader」や「Display」を問題文の仕様通りにちゃんと実装し、コンパイルも通った後で、いざ実行となった場合、私なら以下のようにコマンド上から実行すると思います。 java Editor hogehoge
お礼
ありがとうございました。