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

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

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

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

Q&A

解決済

4回答

2045閲覧

defaultが使えない

reotantan

総合スコア295

Java

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

0グッド

0クリップ

投稿2015/10/14 20:34

default:{
put("正しいコマンドを選択してください");
}
の部分がエラーになってしまいます、何か間違ったdefaultの使い方をしていますか?

コード public class Console { public static void putCommand() throws java.io.IOException { put("1 すぐに魔王を倒す"); put("2 修行する"); put("3 宿屋に泊まる"); int c = inputCommand(); switch (c) { case '1': { put("魔王が現れた。"); break; } case '2': { part01.syugyou(); break; } case '3': { if (part01.gold >= 9.95) { part01.hp = part01.lv; part01.gold -= 9.95; } default:{ put("正しいコマンドを選択してください"); } putStatus(); putCommand(); break; } } } public static int inputCommand() throws java.io.IOException { int c = System.in.read(); if (c == 10 || c == 13) { return (inputCommand()); } return (c); } // 序章を表示ます public static void put1stchapter() { put("魔王は " + "この国を滅ぼそうとしている"); } // ゲームクリア public static void putGameclear() { String s0 = part01.name + "は悪魔を倒しました"; put(s0); System.out.print("レベル" + part01.lv); if (part01.lv > 200) { put("なので魔王ゴミでした"); } else if (part01.lv > 120) { put("なので魔王弱すぎでした"); } else if (part01.lv > 80) { put("なので余裕でした"); } else if (part01.lv > 50) { put("でしたが倒せました"); } else { put("で苦戦しました"); } put("Game Clear"); } // 引数を文字列として表示します public static void put(String str) { System.out.println(str); } public static void putGameOver() { put(part01.name + "は負けました"); put("GAME OVER"); } public static void putStatus() { put("---------------------------------------------"); put(" " + part01.name + " LV" + part01.lv + " HP" + part01.hp + " " + part01.gold + "G"); put("---------------------------------------------"); } }

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

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

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

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

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

guest

回答4

0

他の方が根本的な回答をなさっているので他,気になる点を…

  • switchのcase文に{}のブロックは必要ない

caseの条件に一致する場所にジャンプする機能なのでブロックは必要ない

  • case 3の場合breakがないのでdefaultの文も通ってしまう

投稿2015/10/15 02:33

swordone

総合スコア20651

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

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

0

ベストアンサー

java超入門 17 - TOK2.comに似たソースコードがありました。

確認したところ、JAVA超入門 - TOK2.comのページでチャプターごとに学習を進められるようで、その一つのチャプターのソースコードが投稿者様のコードのようですね。

さて本題ですが、確認したところ、Console.javaについては、以下のようにソースコードを修正すればコンパイルも実行も可能になりました。

Java

1public class Console { 2 // putJyosyou()メソッドを追加 3 /** 4 * 序章を表示します 5 */ 6 public static void putJyosyou(){ 7 put("魔王が" + "世界を滅ぼそうとしています。"); 8 putStatus(); 9 } 10 public static void putCommand() throws java.io.IOException { 11 put("1 すぐに魔王を倒す"); 12 put("2 修行する"); 13 put("3 宿屋に泊まる"); 14 int c = inputCommand(); 15 switch (c) { 16 case '1': { 17 put("魔王が現れた。"); 18 break; 19 } 20 case '2': { 21 part01.syugyou(); 22 break; 23 } 24 case '3': { 25 if (part01.gold >= 9.95) { 26 part01.hp = part01.lv; 27 part01.gold -= 9.95; 28 } 29 // 閉じカッコを追加 30 } 31 default:{ 32 put("正しいコマンドを選択してください"); 33 } 34 35 36 putStatus(); 37 putCommand(); 38 break; 39 } 40 41 //不要な閉じカッコを削除 42 //} 43 44 } 45 46 public static int inputCommand() throws java.io.IOException { 47 int c = System.in.read(); 48 if (c == 10 || c == 13) { 49 return (inputCommand()); 50 } 51 return (c); 52 } 53 54 // 序章を表示ます 55 public static void put1stchapter() { 56 put("魔王は " + "この国を滅ぼそうとしている"); 57 } 58 59 // ゲームクリア 60 public static void putGameClear() { 61 String s0 = part01.name + "は悪魔を倒しました"; 62 put(s0); 63 System.out.print("レベル" + part01.lv); 64 if (part01.lv > 200) { 65 put("なので魔王ゴミでした"); 66 } else if (part01.lv > 120) { 67 put("なので魔王弱すぎでした"); 68 } else if (part01.lv > 80) { 69 put("なので余裕でした"); 70 } else if (part01.lv > 50) { 71 put("でしたが倒せました"); 72 } else { 73 put("で苦戦しました"); 74 } 75 put("Game Clear"); 76 } 77 78 // 引数を文字列として表示します 79 public static void put(String str) { 80 System.out.println(str); 81 } 82 83 public static void putGameOver() { 84 put(part01.name + "は負けました"); 85 put("GAME OVER"); 86 } 87 88 public static void putStatus() { 89 put("---------------------------------------------"); 90 put(" " + part01.name + " LV" + part01.lv + " HP" + part01.hp + " " + part01.gold + "G"); 91 put("---------------------------------------------"); 92 } 93 94}

修正箇所としては、
まずdefaultでコンパイルエラーになるということでしたが、defaultの部分がcase3の閉じカッコの中に入った状態になってましたので、case3側で閉じカッコを追加し、不要な閉じカッコを削除しました。
これでConsole.javaはコンパイルできるようになります。

ただ問題のConsole.javaですが、part01のクラスを必要とするようで、part01.javaをコンパイルしておく必要があります。
念の為、以下にpart01.javaのソースコードを掲載します。
実行する際は、part01側を実行することになります。
※ご存知でしたら、申し訳ありません。

part01.javaをコンパイルしようとすると、「シンボルを見つけられません」のコンパイルエラーが出たため、
Console.java側にputJyosyou()メソッドを追加しました。
putGameClear()メソッドについては、Console.java内に存在しましたが、メソッド名に違いがあり、「putGame”C”lear()」でなければならないところを、「putGame”c"lear()」となっていましたので、大文字"C"に変更する必要があります。

※以下はpart01.javaのソースコードになります。

Java

1public class part01 2{ 3 static String name = "すけさん"; 4 static int lv = 30; //プレイヤーのレベル 5 static int hp = 30; //プレイヤーのHP 6 static double gold=50.0; //プレイヤーの所持金 7 8 public static void main(String[] args) throws java.io.IOException 9 { 10 Console.putJyosyou(); //序章を表示 11 12 putCommand(); //コマンドを表示 13 if(hp==0){ 14 return; 15 } 16 17 //魔王を倒しに行く 18 if(lv<40){ //レベルが40未満の場合 19 Console.putGameOver(); //ゲームオーバー画面を表示 20 21 }else{ //レベルが40以上の場合 22 Console.putGameClear(); //ゲームクリアの画面を表示 23 } 24 } 25 /** 26 * コマンドを表示します。 27 * 28 * @exception IOException 入出力エラーが発生した場合 29 */ 30 public static void putCommand() throws java.io.IOException 31 { 32 Console.put("1. 魔王を倒しに行く"); 33 Console.put("2. 修行する"); 34 Console.put("3. 宿屋に泊まる"); 35 // int c = inputCommand(); 36 switch(inputCommand()){ 37 case '1':{ //1. 魔王を倒しに行く 38 Console.put("魔王が現れた!"); 39 break; 40 } 41 case '2':{ //2. 修行する 42 syugyou(); 43 break; 44 } 45 case '3':{ //3.宿屋に泊まる 46 if(gold>9.95){ 47 hp=lv; 48 gold -= 9.95; 49 } 50 Console.putStatus(); 51 putCommand(); 52 break; 53 } 54 } 55 } 56 /** 57 * 修行する 58 */ 59 public static void syugyou() throws java.io.IOException 60 { 61 java.util.Random r = new java.util.Random(); 62 //敵出現 63 int e = r.nextInt(9)+1; //敵の数 64 Console.put(" 敵が " + e + " 匹、現れた"); 65 String m = "(゚Д゚)"; 66 String s = ""; 67 for(int i=0; i<e; i=i+1){ 68 s = s + m; 69 } 70 Console.put(s); 71 72 //HPを減らす 73 int d = r.nextInt(8); 74 hp -= d; 75 if(hp<0){ 76 hp = 0; 77 } 78 Console.put(name + " は、 "+ d +" ポイントのダメージを受けた!"); 79 80 //レベル上昇 81 82 lv += e; 83 Console.put("レベルが"+lv+"になった"); 84 Console.putStatus(); 85 if(hp==0){ 86 Console.put("GAME OVER"); 87 }else{ 88 putCommand(); 89 } 90 } 91 92 /** 93 * 入力ストリームからデータの次のバイトを読み込みます。 94 * 改行コードは無視されます。 95 * 96 * @return データの次のバイト ストリームの終わりに達した場合は-1 97 * @IOException 入出力エラーが発生した場合 98 */ 99 public static int inputCommand() throws java.io.IOException 100 { 101 int c = System.in.read(); 102 if(c==10 || c==13){ //改行コード(CR又はLF)の場合 103 return(inputCommand()); 104 } 105 return(c); 106 } 107 108}

投稿2015/10/14 22:50

pice

総合スコア409

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

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

0

default:{ put("正しいコマンドを選択してください"); }

のdefaultの行とputの行をその後にある閉じ括弧「}」の下に移動すればいいと思います。
へんなところに挿入しちゃってるんじゃないですかね。

投稿2015/10/15 01:22

kaputaros

総合スコア1844

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

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

0

case '3': { の閉じ括弧がありません。

投稿2015/10/14 22:39

otn

総合スコア84555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問