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

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

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

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

Q&A

解決済

1回答

1589閲覧

javaで二次元配列でコンソール上にオセロを作りたいのですが、標準入力で入力したx軸とy軸の値が、実行される際に逆になってしまいます。

Pupux

総合スコア1

Java

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

0グッド

0クリップ

投稿2021/12/01 06:07

編集2021/12/01 06:25
JAVA import java.util.Scanner; public class boardOsero { public static String board[][] = new String[9][9]; public static String white = "◯"; public static String black = "●"; public static String EMPTY = " "; public static void main(String[] args){ Scanner s = new Scanner(System.in); boardInitValue(); boardSetup(); showBoard(); System.out.print("駒をおくx座標を入力してください:"); int x = s.nextInt(); System.out.print("駒をおくy座標を入力してください:"); int y = s.nextInt(); setStone(x,y); } //ボードの初期表示項目を設定する public static void boardSetup() { for(int i=1; i<9; i++) { board[0][i] = String.valueOf(i); board[i][0] = String.valueOf(i); } } public static void boardInitValue() { for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { board[j][i] = EMPTY; } } } public static void showBoard() { for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { System.out.print("|" + board[j][i]); //7列目記載の際に、最後に「|」を入れて改行する if(j==8) { System.out.println("|"); } } } } static public void setStone(int x,int y) { board[y][x] = black; showBoard(); } }

前回質問させていただいたコードを削って見やすくしました。問題は標準入力で入力したx軸とy軸が逆になってしまい、オセロの駒を置きたい位置と違う場所になってしまうことです。例えば、標準入力でxに2,yに1を代入させた所、xが1,yが2のところにオセロの駒が配置されてしまいます。原因は標準入力にありそうだということまではわかりましたが、自力では原因がわかりませんでした。引数の受け渡す順番や二次元配列も自分で確かめた限りでは間違えがわかりません。ご教授いただければ幸いです。

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

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

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

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

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

1T2R3M4

2021/12/01 06:11

>標準入力でxに2,yに1を代入させた所、xが2,yが1のところにオセロの駒が配置されてしまいます。 は何が問題なのでしょうか。
Pupux

2021/12/01 06:26

>標準入力でxに2,yに1を代入させた所、xが2,yが1のところにオセロの駒が配置されてしまいます。 訂正しました。申し訳ありません。正しくはxに2,yに1を代入させた所、xが1,y2 です。
jimbe

2021/12/01 07:03

同じ内容のご質問であれば、前回のご質問を編集するようにしてください。
guest

回答1

0

ベストアンサー

原因は標準入力にありそうだということまではわかりました

原因は標準入力ではありません。

原因は、入力で想定しているx,yの方向と表示のx,yの方向が異なるからです。

入力のx,yの方向が正しいとお考えならば、表示の方向を逆にしなければなりません。
showBoard の board[j][i] の j,i を逆にしてください。

表示の方向が正しいとお考えならば、入力の方向を逆にしなければなりません。
setStone の board[y][x] の x,y を逆にしてください。

大方のイメージとしては、画面の横方向が x 、縦方向が y とするのが一般的かと思います。
すると、System.out.print(~) を繰り返して表示するのは x 方向となり、さらに改行を加えてそれを繰り返すのが y 方向となるでしょう。
showBoard の内側の for の変数を x 、 外の for の変数を y に変えてみると、 board[x][y] となり、 setStone での指定とは逆になっていることが分かり易いと思います。

余談ですが「オセロ」は登録商標ですので、あまり大っぴらには出さないほうが無難かと思います。
大っぴらに出すおつもりも無いとは思いますが^^;

投稿2021/12/01 07:17

編集2021/12/01 07:41
jimbe

総合スコア13209

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

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

Pupux

2021/12/01 11:10 編集

ここ数日間悩んでいたので感動しました!!自分がどこで勘違いしてるか理解できなかったのですが、入力と表示の方向が逆になっている意味がわかりました!表示する方のxとyがどう表示されているのかをわかったら理解できました!本当にありがとうございました。 余談の方も理解しました。プログラミングの勉強の教材としてオセロを作ってみようと思い、商品にするつもりはありませんでしたが、気を付けます。教えてくださり、ありがとうございます。ほかのゲームを作る際にも気を付けようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問