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

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

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

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

Q&A

解決済

3回答

1008閲覧

switch文について

riroholll

総合スコア57

Java

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

0グッド

0クリップ

投稿2017/02/12 14:30

この文をswitch文に直すとどのような形になるのでしょうか

if(Status[xx/block][yy/block+2]==false) { Status[xx/block][yy/block+1]=false; Status[xx/block][yy/block]=false; Status[xx/block][yy/block-1]=false; Status[xx/block][yy/block-2]=false; yy=0; }

回答の程よろしくお願いします。
また、詳しく解説も併せてお願いしたします

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

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

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

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

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

benzo

2017/02/12 14:33

言語はCですか?
mike2mike4

2017/02/12 14:35

JAVAタグが貼ってありますよ
riroholll

2017/02/12 14:40

すみませんjavaです
benzo

2017/02/16 16:19

あーほんとだJavaだ。見落としてました。
guest

回答3

0

blockをintだと仮定してswitch文の分岐条件にすると以下のようにもできます
0で割るとエラーが出るので0の時はbreakする
1の値で割るとエラーが出るのでcaseに入れず
xx,yyの値である10より上の値で割るとやはりエラーが出るのでこれもcaseに入れず
defaultに含める

他にも配列の長さなどに応じて気を付けるべき点ができて来ると思いますが、
それは提示された部分以外のコードを知っている存在が気を付けるべきところではないかと思います

java

1class ST0 { 2 3 public static void main(String[] args) { 4 5 boolean[][] Status = { 6 { true, false, false, true, false, true, false, true, true, 7 true }, 8 { true, false, false, true, false, true, false, true, true, 9 true }, 10 { true, false, false, true, false, true, false, true, true, 11 true }, 12 { true, false, false, true, false, true, false, true, true, 13 true }, 14 { true, false, false, true, false, true, false, true, true, 15 true }, 16 { true, false, false, true, false, true, false, true, true, 17 true }, 18 { true, false, false, true, false, true, false, true, true, 19 true }, 20 { true, false, false, true, false, true, false, true, true, 21 true }, 22 { true, false, false, true, false, true, false, true, true, 23 true }, 24 { true, false, false, true, false, true, false, true, true, 25 true }, }; 26 int block = 10; 27 28 int xx = 10; 29 int yy = 10; 30 31 switch (block) { 32 33 case 0: 34 break; 35 36 37 case 2: 38 case 3: 39 case 4: 40 case 5: 41 case 6: 42 case 7: 43 case 8: 44 case 9: 45 case 10: 46 47 if (Status[xx / block][yy / block + 2] == false) { 48 Status[xx / block][yy / block + 1] = false; 49 Status[xx / block][yy / block] = false; 50 Status[xx / block][yy / block - 1] = false; 51 Status[xx / block][yy / block - 2] = false; 52 yy = 0; 53 } 54 break; 55 default: 56 break; 57 } 58 59 } 60 61}

投稿2017/02/12 16:10

編集2017/02/12 16:21
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

自分にはこの質問にあなたのどんな課題があるのかがわかりませんでした。

まずxx/block等々は問題の本質のように見えませんでした。以下のコードと置き換えてもなんら変わらない気がします。もし本質でないならあらかじめ不必要な複雑さは排除した方が問題のポイントにフォーカスしやすいと思います。そこは特に問題でないと仮定し以下はxx/blockをxi, yy/blockをyiに置き換えます。

java

1if (Status[xi][yi+2]==false) { 2 Status[xi][yi+1]=false; 3 Status[xi][yi]=false; 4 Status[xi][yi-1]=false; 5 Status[xi][yi-2]=false; 6 yy=0; 7}

さて上のような単体のif文と同一の論理となるようなswitch文にするとしたら以下のようなものになると思います。switch文にする意味も詳しい解説が必要にも思えません。なんとなく質問者さんが問いかけたかった解ではない気がしますが・・・

jav

1switch (Status[xi][iy+2]) { 2 case false: 3 Status[xi][yi+1] = false; 4 Status[xi][yi ] = false; 5 Status[xi][yi-1] = false; 6 Status[xi][yi-2] = false; 7 yy=0; 8 9 default: 10 break; 11} 12

問題のif文の外側にループなどのなんらかの制御構文があったり複数のif文が羅列されているなら問題となり得る気がします。それなしに単体でif文をswitchへ置き換えることには意味が感じられないというのが自分の意見です。

投稿2017/02/12 15:34

KSwordOfHaste

総合スコア18394

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

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

0

直しようがないと思います。
switch文は数値、String、enum型の値で処理を振り分ける制御文なのですが、
この文はそのいずれでも制御できません。

投稿2017/02/12 15:07

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問