ワープロのような動きを再現
解決したいこと
ArrayListの中でStringBuilderを用いてワープロのような動きをシミュレーションしたい
そこで次の命令をキーボードの入力で受け付ける
そこで次の命令を受け付けることとする
left・・・カーソルを左に動かす
right・・・カーソルを右に動かす
insert 文字列・・・カーソルの左側に文字列を挿入する
backspace・・・カーソルの左側の文字を削除する
quit・・・プログラムを終了する
up・・・カーソルを上に動かす
down・・・カーソルを下に動かす
insertline・・・カーソルの上側に空文字列の行が挿入される
addline・・・カーソルの下側に空文字列が挿入される
deleteline・・・カーソルがある行を消す
該当するソースコード
package prog2;
import java.util.ArrayList;
import java.util.Scanner;
public class MultiLineEditor {
ArrayList<StringBuilder> line ;
int cursorRow;
int cursorPos;
public MultiLineEditor() {
line = new ArrayList<StringBuilder>();
line.add(new StringBuilder());
cursorRow = 0;
cursorPos = 0;
}
void run() {
Scanner sc = new Scanner(System.in);
while(true) {
String inline = sc.nextLine();
String [] input = inline.split("[ ]+");
int i=0;
if(input[i].equals("left")) {
left();
print();
}else if(input[i].equals("right")) {
right();
print();
}else if(input[i].equals("insert")) {
insert(input[i+1]);
print();
}else if(input[i].equals("backspace")) {
backspace();
print();
}else if(input[i].equals("quit")) {
break;
}
}
}
void left() {
if(0<cursorPos) {
cursorPos=cursorPos-1;
}else {
System.out.println("カーソルは既に左端にあります");
}
}
void right() {
if(cursorPos<line.size()) {
cursorPos=cursorPos+1;
}else {
System.out.println("カーソルは既に右端にあります");
}
}
void backspace() {
if(0<cursorPos) {
line.remove(cursorPos-1);
cursorPos=cursorPos-1;
}else{
System.out.println("左側に文字はありません");
}
}
void insert(String str) {
line.add(cursorPos,str);//ここはエラーが出てます
cursorPos=cursorPos+str.length();
}
void print() {
System.out.println(cursorRow+" "+cursorPos + " " + line);
}
void up() {
if(cursorRow>0) {
cursorRow=cursorRow-1;
}else {
System.out.println("カーソルは一番上にあります");
}
}
void down() {
if(cursorRow>line.size()) {
cursorRow=cursorRow+1;
}else {
System.out.println("カーソルは一番下にあります");
}
}
void insertline() {
}
void addline() {
}
void deleteline() {
}
public static void main(String[] args) {
new MultiLineEditor().run();
}
}
ここまでは組むことができたのですが、ここから先の進め方がわからなくなってしまいました。教えていただけると幸いです。
0 likes