1

入力した位置がチェスボードで有効かどうかを確認したいので、

//returns true if the position is in the range of A1-H8

private boolean isValid(String position){
    char first=position.charAt(0);
    String letter=(""+first).toLowerCase();
    boolean validLetter=position.equals("a") || position.equals("b") || position.equals("c")|| 
            position.equals("d") || position.equals("e")|| position.equals("f") || position.equals("g") ||
            position.equals("h");

ご覧のとおり、ブール値はかなり醜いので、これを行うより良い方法は何ですか?

ところで、2文字目が数字かどうかはどうやって調べるの??

===編集==== みんなありがとう!しかし、あなたの答えはすべて私にはとても複雑に思えます。私はJavaを学び始めたばかりなので、問題に対するより基本的なアプローチを教えてください。

4

3 に答える 3

6

正規表現はこれを簡単に処理します:

private boolean isValid(String position) {
    return position.matches("^[a-h][1-8]$");
}

正規表現に慣れていない場合は、次のようなものが適しているかもしれません。

private boolean isValid(String position) {
    if (position.length() != 2) {
        return false;
    }
    char firstChar = position.charAt(0);
    List<Character> validFirstChars = Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    if (!validFirstChars.contains(firstChar)) {
        return false;
    }
    char secondChar = position.charAt(1);
    List<Character> validSecondChars = Arrays.asList('1', '2', '3', '4', '5', '6', '7', '8');
    if (!validSecondChars.contains(secondChar)) {
        return false;
    }
    return true;
}

最適化として、validFirstChars各メソッド呼び出しでインスタンス化する代わりに、クラスのメンバーにするvalidSecondCharsことができます。final static

于 2013-11-14T23:23:47.673 に答える
0

本当に簡単な例:

private boolean isValid(String position) {
  // We will check only strings with 2 characters
  if (position.length() != 2) {
    return false;
  }
  // If the first char is not between a and h, let's return false.
  char first = position.charAt(0);
  if (first < 'a' || 'h' < first) {
    return false;
  }
  // If the second char is not between 1 and 8, let's return false.
  char second = position.charAt(1);
  if (second < '1' || '8' < second) {
    return false;
  }
  // We couldn't prove the position was invalid, so it must be valid.
  return true;
}
于 2013-11-15T00:18:21.947 に答える