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

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

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

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

Q&A

解決済

5回答

1669閲覧

int[][]の2次元配列に定形パターンを与えた時、そのパターンを文字列で返すプログラムを意図していますが…

gyro16

総合スコア89

Java

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

0グッド

0クリップ

投稿2016/12/21 05:51

編集2016/12/21 07:50

###前提・実現したいこと
8×8マスのint[][]の2次元配列に0と1を格納し、
パターンがA からG の時そのパターンの形を文字列で表示するプログラムを意図しています。

パターンAの配列が8×8の2次元配列にあるとき、A と表示するプログラムを意図して書いています。

このソースコードはコンパイルは通りますが、何も処理されていない、何も表示されません。

が、A からG のうちの該当パターンの0、1で構成される2次元配列に格納した時、
パターンの形の文字列が出力されません。

入力待ちになっています。
×処理が起こっていないか(←この可能性が高い)、空文字が出力されているか、です。
与えられる入力は
スペースなど区切り無しで
00000000
01100000
01100000
00000000
00000000
00000000
00000000
00000000
で与えられ、この場合 Aを表示する

###発生している問題・エラーメッセージ
入力待ちになっています。
スペース無しで0と1の入力が与えられます。

何も処理されていない。
何も表示されない。

エラーメッセージ

###該当のソースコード

java

1import java.util.*; 2 3public class C{ 4 private static final Scanner scan = new Scanner(System.in) 5 .useDelimiter("[\\s]+"); 6 7 public static void main(String[] args){ 8 9 while(scan.hasNext()){ 10 int[][] mas = new int[8][8]; 11 for(int i = 0; i < 8; i++){ 12 for(int j = 0; j < 8; j++){ 13 mas[i][j] = scan.nextInt(); 14 } 15 } 16 boolean flag = false; 17 String type = ""; 18 Loop:for(int i = 0; i < 8; i++){ 19 for(int j = 0; j < 8; j++){ 20 if(mas[i][j] == 1){ 21 if(j+1 < 8 && i+1 < 8){ 22 if(mas[i][j+1] == 1 && mas[i+1][j] == 1 && mas[i+1][j+1] == 1){ 23 flag = true; 24 type = "A"; 25 break Loop; 26 } 27 } 28 if(i+1 < 8 && i+2 < 8 && i+3 < 8){ 29 if(mas[i+1][j] == 1 && mas[i+2][j] == 1 && mas[i+3][j] == 1){ 30 flag = true; 31 type = "B"; 32 break Loop; 33 } 34 } 35 if(j+1 < 8 && j+2 < 8 && j+3 < 8){ 36 if(mas[i][j+1] == 1 && mas[i][j+2] == 1 && mas[i][j+3] == 1){ 37 flag = true; 38 type = "C"; 39 break Loop; 40 } 41 } 42 if(j+1 < 8 && i+1 < 8 && j+2 < 8){ 43 if(mas[i][j+1] == 1 && mas[i+1][j+1] == 1 && mas[i+1][j+2] == 1){ 44 flag = true; 45 type = "E"; 46 break Loop; 47 } 48 } 49 if(i+1 < 8 && j+1 < 8 && i+2 < 8){ 50 if(mas[i+1][j] == 1 && mas[i+1][j+1] == 1 && mas[i+2][j+1] == 1){ 51 flag = true; 52 type = "F"; 53 break Loop; 54 } 55 } 56 } else if(mas[i][j] == 0){ 57 if(j+1 < 8 && i+1 < 8 && i+2 < 8){ 58 if(mas[i][j+1] == 1 && mas[i+1][j] == 1 && mas[i+1][j+1] == 1 && mas[i+2][j] == 1){ 59 flag = true; 60 type = "D"; 61 break Loop; 62 } 63 } 64 if(j+1 < 8 && j+2 < 8 && i+1 < 8){ 65 if(mas[i][j+1] == 1 && mas[i][j+2] == 1 && mas[i+1][j] == 1 && mas[i+1][j+1] == 1){ 66 flag = true; 67 type = "G"; 68 break Loop; 69 } 70 } 71 } 72 } 73 } 74 System.out.printf("%s\n", type); 75 } 76 } 77}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答5

0

どのような入力を与えましたか?
ここで少しだけ試してみましたが、上手く動いているようです。

投稿2016/12/21 07:03

takara7

総合スコア107

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

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

gyro16

2016/12/21 07:07

00000000 01100000 01100000 00000000 00000000 00000000 00000000 00000000 これの場合パターンAで Aが表示されるはずですが、でません。
ozwk

2016/12/21 07:18 編集

0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ではなく? つまり、スペース入れてます?
fuzzball

2016/12/21 07:19 編集

(間違えてたので削除)
takara7

2016/12/21 07:36 編集

質問のコードであれば、scanner.userDelimiter("[\\s]+)としているのですから、すべての数字をスペース区切り(改行もなし)なら動きます。つまり、 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 と入力すれば出力Aが得られます。 (蛇足ですが、"[\\s]+"の[]は必要ありません。) *訂正 勘違いしていましたが、\\s+は改行にもマッチするので、上のozwkさんの入力でAになります。
gyro16

2016/12/21 07:32

スペース無しでの入力を処理することを目的としています。 のでスペース無しで入力を与えます。
takara7

2016/12/21 07:59

スペースなし、改行ありであれば、それで読み込むようにscannerの区切り文字を設定しましょう。 具体的には、useDelimiter()の引数を"\\n?"としてください。 これは0〜1文字の改行にマッチする正規表現です。0文字でもいいので、文字と文字の間の空文字にもマッチし、1文字ずつ区切られます。
guest

0

ベストアンサー

スペース無しで0と1の入力が与えられます。

と言っておきながら、

java

1.useDelimiter("[\\s]+"); // スペースを区切り文字に使うよ!

とか書いているので、意図通りに動かないのは当たり前です。

1文字ずつ読み取って配列に入れ込みましょう。

雑でいいなら:

java

1int[][] mas = new int[8][8]; 2for(int i = 0; i < 8; i++){ 3 String str = scan.nextLine(); 4 for(int j = 0; j < 8; j++){ 5 mas[i][j] = str.charAt(j) - '0'; 6 } 7}

投稿2016/12/21 07:50

編集2016/12/21 07:56
ozwk

総合スコア13521

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

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

0

takara7さんのコメントに書いたような形式の入力なら、scan.nextInt()で一行丸々読み込みます。それが8行分だけ繰り返されます。
配列1行分は埋まりますが、残りが埋まらず入力待ちになっているのでは?

投稿2016/12/21 07:17

swordone

総合スコア20651

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

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

gyro16

2016/12/21 07:35

スペース無し入力で与えられますので、入力はスペース無しで入力します。 入力待ちですか、どうすればいいのでしょうか?
guest

0

与えた入力と、期待する出力を書いてもらわないと、何が正しいのか分かりません。
どういう入力を与えたらいいのかは分かっているのでしょうか?

また、typeに初期値を入れておけば、処理されていないのか、それともパターンが見つからなかったのかの違いが分かると思います。

java

1String type = "(not found)";

入力の読み取り部分

Javaの勉強がてら作ってみました。

java

1Scanner scan = new Scanner(System.in); //デリミタいらないよね? 2while(scan.hasNext()) { 3 int[][] mas = new int[8][8]; 4 for(int i = 0; i < 8; i++) { 5 String line = scan.next(); //1行読み込み 6 for(int j = 0; j < 8; j++) { 7 mas[i][j] = Integer.parseInt(line.charAt(j)+""); //1文字ずつ取り出す 8 } 9 } 10 : 11}

投稿2016/12/21 07:11

編集2016/12/21 08:04
fuzzball

総合スコア16731

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

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

fuzzball

2016/12/21 07:54

入力の読み取り部分を修正してみました。
guest

0

質問のコードを見ると、パターンが見つかると"break Loop;"でforループの最初(ラベル Loop)に戻るようになっています。
そのため、設定したデータにいずれかのパターンが含まれていれば、無限にループが実行されます。

7か所の

break Loop;

を、

System.out.printf("%s\n", type); return;

に書き換えれば、パターンの種類(”A"~"G")を表示した後にプログラムが終了するようになるはずです。

投稿2016/12/21 07:08

coco_bauer

総合スコア6915

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

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

fuzzball

2016/12/21 07:16 編集

Loopに戻るのではなく、Loopを抜けるのではないですか?(Java知らないけど)
swordone

2016/12/21 07:20

break ラベル は、対象のループを抜けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問