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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

基本情報技術者

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

Q&A

解決済

1回答

1944閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

基本情報技術者

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

0グッド

1クリップ

投稿2015/09/27 01:23

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

疑問①
クラス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' するという処理。
問題中の盤の升は列ah、行18 で表されていますが、実際の要素は 0~7 の番号で表されるので、例えばposition が "d2" だった場合、

d-a=3
2-1=1

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー


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 01:42

編集2015/09/27 02:01
argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/09/27 04: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
raccy

2015/09/27 04: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
argius

2015/09/27 05: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 05:12

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問