はしごのような言葉遊びのデザイン手法の選択という質問を見つけました。私もこの種のプログラムをやりたいと思っています。私はいくつかのコードを書きましたが、すでに 2 つの問題があります。これが私がすでに持っているものです:
グリッド :
public class Grid {
public Grid(){}
public Grid( Element e ){}
}
エレメント :
public class Element {
final int INVISIBLE = 0;
final int EMPTY = 1;
final int FIRST_LETTER = 2;
final int OTHER_LETTER = 3;
private int state;
private String letter;
public Element(){}
//empty block
public Element(int state){
this("", 0);
}
//filled block
public Element(String s, int state){
this.state = state;
this.letter = s;
}
public static void changeState(int s){
}
public int getState(){
return state;
}
public boolean equalLength(){
return true;
}
public boolean equalValue(){
return true;
}
@Override
public String toString(){
return "["+letter+"]";
}
}
主要:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Height: ");
while (!sc.hasNextInt()) {
System.out.println("int, please!");
sc.next();
}
final int height = sc.nextInt();
Grid[] game = new Grid[height];
for(int i = 1; i <= height; i++) {
String s;
do {
System.out.println("Length " + i + ", please!");
s = sc.next();
} while (s.length() != i);
Element[] line = new Element[s.length()+1];
Element single = null;
String[] temp = null;
//ここで発行
temp = s.split("");
System.out.println("s.length: "+s.length());
System.out.println("temp.length: "+temp.length);
///
for(String str : temp){
System.out.println("str:"+str);
}
for (int k = 0 ; k < temp.length ; k++) {
if( k == 0 ){
single = new Element(temp[k], 2);
System.out.println("single1: "+single);
}
else{
single = new Element(temp[k], 3);
System.out.println("single2: "+single);
}
line[k] = single;
}
for (Element l : line) {
System.out.println("line:"+l);
}
//ここで発行
game[i] = line;
}
///
for (Grid g : game) {
System.out.println(g);
}
}
}
debug の出力例:
Height:
3
Length 1, please!
A
s.length: 1
temp.length: 2
str:
str:A
single1: []
single2: [A]
line:[]
line:[A]
これが私がそれがどのように機能するべきだと思うかです。ユーザーの言葉をつかみます。次に、ゲーム全体の Grid 要素を作成します。次に、行ごとに行という Element[] 配列を作成します。与えられたテキストを分割すると、ここに最初の問題があります。string.split() が空白を追加するのはなぜですか? 理由もなく追加されていることが出力ではっきりとわかります。どうすればそれを取り除くことができますか (コードを実行するためだけに行の長さに +1 を追加する必要がありました)。続けて、分割されたテキストを一時的な String 配列にスローし、次に各文字から Element オブジェクトを作成して行配列にスローします。この空きスペース以外の出力は正常に見えます。しかし、次の問題はグリッドにあります。Element を引数として取るコンストラクターを作成しましたが、「互換性のない型」のために Grid[] 要素として行をスローすることはできません。どうすれば修正できますか?私はそれを正しくやっていますか?多分私は Element[] として行を取り除き、 Grid[][] を作成する必要がありますか?