質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • Java

    13473questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • 基本情報技術者

    45questions

    基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。

リバーシの問題が解けました。しかし疑問が。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 748

remember

score 150

リンク内容
リバーシの問題がやっと解けました。しかしわからない所がいくつかあります。

疑問①
クラスReversi  の真ん中あたりにある

while ((n = board.place(player, prompt(player))) <= 0)

なんですが、この while文は {} がつけられていません。これは省略していいものなんですか? 省略できるとしたら、この while文の次の一文だけが繰り返しの対象になる、という認識でいいのですか?

疑問②
クラスReversi の下の方にある

else if (!board.canPlace(opponent))

の "!" がわかりません。どういう意味でしょうか。

疑問③
クラスBoard の下の方

int place(Player player, String position) {
      int count = 0;
      try {
         int col = position.charAt(0) - 'a';
         int row = position.charAt(1) - '1';

position で与えられた文字を抜き出して、1文字目を -'a' 、2文字目を -'1' するという処理。
問題中の盤の升は列a~h、行1~8 で表されていますが、実際の要素は 0~7 の番号で表されるので、例えばposition が "d2" だった場合、

d-a=3
2-1=1

となり、[1][3] が指定される(他サイトの解説で理解したのですが)。
しかし d-a というのがわかりません。d にも a にも整数は入っていませんよね?こういった計算ができるのですか?
あと charAt() は文字を取り出しているんですよね? 文字型同士の計算はできるのですか? int型に変換しなくてもいいのでしょうか。

どなたか解説をお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2


while,if,forなどでもそうですが、文が1つだけなら波カッコ({ })は省略可能です。
ただし、あとで文を追加するときなどにカッコを付け忘れて問題になることがあるので、省略を禁止するコーディングスタイルが推奨される場合が多いです。

参考リンク:
中括弧省略問題 - No Programming, No Life



否定演算子です。booleanを反転します。
board.canPlace(opponent) == falseと同じ意味になります。
Javaでは == true, == falseと書くことは一般的ではありません。

参考リンク:
論理否定演算子(logical omplement operator) - BohYoh.com【Java講座】用語集



char型の値は、符号なし16ビット整数型としても使えます。例えば、'b' - 'a'1になります。32ビット以下の整数型同士の計算は、intに変換してから計算されます。

参考リンク:
Java 入門 | 変数と自動型変換

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/27 13:16

    3.についてちょっと補足すると,コンピュータでは文字を数字と対応させています.
    この対応の規則を文字コードと言いますが,JavaではUnicodeという文字コードを使用しています.
    char型の実体は,文字に対応するUnicode番号なのです.
    例えば数字の'0'~'9'はUnicodeでは48~57に対応しています.
    アルファベット大文字の'A'~'Z'は65~90に,小文字の'a'~'z'は97~122に対応しています.
    →http://www.tamasoft.co.jp/ja/general-info/unicode.html

    キャンセル

  • 2015/09/27 13:30

    JavaのcharとUnicode番号が一対一で完全に対応していたのは昔の話です。
    現在のUnicodeはU+0000 - U+10FFFFまで拡張されたため、U+10000 - U+10FFFF範囲は16bitsであるchar1個では表現できません。現在のJavaのcharはUTF-16表現となっており、U+10000以上(𠮷とか🐱とか)はサロゲートペアを用いて2個のcharで表現しています。異体字や絵文字を使う場合はcharを単純に数値として扱ええない場合がありますので、ご注意ください。
    詳しくは下記ドキュメントを見てください。
    https://docs.oracle.com/javase/jp/8/api/java/lang/Character.html

    キャンセル

  • 2015/09/27 14:04

    リバーシの中ではcharが単純に16bit整数として使われていますが、場合によってはこのようなコードは問題のある使い方なので注意が必要です。
    (String#indexOfを使った方がマシかな。 "abcdefgh".indexOf(position.charAt(0)) のように)

    raccyさんの書かれているとおり、Javaのchar全般についてはサロゲートの考慮が必要になります。
    もし余裕があれば、下記ページなどを参照することをお薦めします。

    Java による Unicode サロゲートプログラミング
    http://www.ibm.com/developerworks/jp/ysl/library/java/j-unicode_surrogate/

    キャンセル

  • 2015/09/27 14:12

    皆様ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    java  じゃんけんゲーム

    コード java public class Player {          //定数、変数     int player = 5;                     

  • 解決済

    数式文字列を計算したい Stackの中身の型は決まっていない?

    数式文字列を計算したいです。 ネットで調べると逆ポーランド記法になおしてから計算するのが簡単なのかなと思い、それをやってみようと思いました。 StackとQueueを使うそうなの

  • 解決済

    java

    アプレットとアプリケーション?の違いについてお聞きしたいです。 私の解釈が間違っているかもしれませんが、 アプリケーションの場合mainメソッドがあり public class

  • 解決済

    文字列の解析処理について

    こんにちは。 与えられた文字列を分解する処理を行う下記のソースについて、ご意見を頂ければと思います。 前提・実現したいこと使用言語:Java 与えられる文字列には、「&」また

  • 解決済

    オセロプログラミングで、CPUと対戦する機能を実装したい。

    現在オセロプログラミングの基礎部分は出来上がり、人対人ならできるようになりました。 JButtonを利用し、打つことが出来ない部分は.setEnabled(false)を使うこと

  • 解決済

    配列を他のクラスで使用する

    package othello; import java.awt.Color; public class CommonConstants { // 一つのマスの大きさ

  • 解決済

    日付を表示するdate関数の返り値を反映させたい

    javascript,htmlについて質問です。 日付を表示するdate関数の結果が、以下のコードの結果と一緒に表示されるようにしたいです。 $("#board").pre

  • 解決済

    C++でのオセロゲームについて

    色々手を尽くしましたが、自力で解決できないため教えていただければと思い質問いたします。 学習のためhttps://gist.github.com/mia-0032/5325961

同じタグがついた質問を見る

  • Java

    13473questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • 基本情報技術者

    45questions

    基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。