0

私はJavaでボードスタイルのゲームに取り組んでいます。現在、ボードは 2 次元配列で初期化されています。プレーヤーは自分のチップの色と自分の動きを入力することで動きを作ることができます。例えば、次のように入力します: "W c 3" W = チップの色/プレーヤー c は列に対応する文字で、6 は行です。文字列から値を取得し、ボードの行と列を更新できるようにする必要があります。したがって、" a 1" は row =1 col = 1 である必要があります。"b 1" は row = 1 col = 2 である必要があります。例として、"e 5" は row = 5 col = 5 です。

どうすればそのようなことをすることができますか?

これが役立つ場合、これが私の move.java クラスのコードです。私が取り組んでいるメソッドは Move (String str) メソッドです。

public class Move implements Comparable<Move>{
    static final int PASS_VALUE = 0; 
    int row, col; 
    boolean movement;
    int pass;
    int pos;
    Board board; 
    /**
     * 
     * Default constructor that initializes a pass move
     */
    Move(){
        row = PASS_VALUE; 
        col = PASS_VALUE;
    }//Move default contructor
   /**
    * 
    * @param rowValue
    * @param colValue 
    */
    Move(int rowValue, int colValue){
        row = rowValue; 
        col = colValue; 
    }//Move constructor

    /**
     * 
     * @param oldMove -- Move to be copied 
     */
    Move(Move oldMove){
        row = oldMove.row;
        col = oldMove.col; 

    }//Move clone constructor

    Move(String str) {
        //int i = Integer.parseInt( str );


    } //Move String constructor

    Move (int positions) {

    }//Move Positions constructor

    /**
     * 
     * @return string value of Move 
     */
    @Override
    public String toString(){
        String result ="";
        String headers = " abcdefgh";
        char colLetter = headers.charAt(col);
        result = colLetter + " " + row; 

        return result;
    }//toString
    /**
     * 
     * @param otherMove -- move to be compared 
     * @return 
     *      -1 if this move precedes otherMove
     *       0 if this move equals otherMove
     *       1 if this move succeeds otherMove
     */
    @Override
    public int compareTo(Move otherMove){
        return 0;
    }//compareTo

   boolean isAMove() {
        return movement; 
    }
   boolean isAPass(){
       return row == PASS_VALUE;
   }
}//Move

***文字列変数 (str) は次のコードによって設定されていることに注意してください。

Move getOpponentMove(BufferedReader keyboard) throws IOException {
        OthelloOut.printComment("Please enter your move");
        InputStreamReader reader = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(reader);
        String initializeStr = keyboard.readLine();
        Move opponentMove = new Move(initializeStr);

        return opponentMove;
    }
4

4 に答える 4

1

文字列が厳密に「a b」の形式で、a が aa ~ z の範囲にあり、b が 0 ~ 9 の範囲の数値である場合は、次のようにします。

/* s is your string */
int row = s.charAt(0) - 'a' + 1;
int col = s.charAt(2) - '0' + 1;

ここでは、ASCII 文字の数値と、「a」がバイト データ型であるという事実を利用しました。

もちろん、本番環境では、事前に検証する必要がありますs(長さ、2 番目の文字がスペースであるかどうかなどを確認します。Java のString.matches方法で正規表現チェックを使用することもできます)。あなたがしなければならないのは、

s.matches("[a-z] [0-9]")

本当です。私の方法は、古き良き C 時代への回帰です。

于 2013-10-10T19:47:25.187 に答える
0

次の順序で行います。

次の形式の入力があると仮定します。

String input = new String("W c 3");

1.split() で入力を解析します。

String color = input.split(" ")[0];
String column = input.split(" ")[1];

2.int 変数については、メソッド parseInt() を呼び出します。

int row = Integer.parseInt(input.split(" ")[2]);
于 2013-10-10T19:46:20.660 に答える
0

私はこれを行います:

  • スペースを区切り文字として使用して分割する
  • 「abcdefg....xyz」のindexOf(文字)
  • Integer.parseInt(数字)
于 2013-10-10T19:45:08.630 に答える
0

このようにすることができます(コメントで説明しています):

// create an array of the alphabet from a - z
public String[] alpha = {"a", "b", "c", "d", "e"}; //...etc.

// here is your value
String input = "e 5";

// split it at the space
String[] split = input.split(" ");

// find it in the array and add 1 to get your row (because arrays start at 0)
int row = Arrays.asList(alpha).indexOf(split[0]) + 1;

// get the column as well
int column = Integer.parseInt(split[1]);
于 2013-10-10T19:50:50.243 に答える