2014年01月14日
JavaEEの前に復習をしてみる その6 キーボード入力とSwitch分岐
今までのコードだと、コードを上から下に流すだけで、
プログラム実行者が操作したりといったことがありませんでした。
せめてキーボードから、何か入力をしたい!
そういうときは、下記を使います。
java.util.Scanner (System. in ).nextInt();
キーボードからの数値を受け付けることができます。
これで、入力された数値に対して、違う動きをさせることが可能です。
合わせてSwitch文を使います。
switch (select){
case 1:System. out.println( "攻撃します。 …誰もいません!" );
break ;
case 2:System. out.println( "防御します。 けど、誰もいません!" );
break ;
case 3:System. out.println ("回復します。 とりあえず、寝ましょうか。" );
break ;
default :System.out .println( "1~3で選んでください。" );
break ;
}
これは、selectという変数の値で、caseに続く値と一致した時に、こういう処理をしなさい。
defaultは、上記に該当しない場合、次の処理をしなさいという意味合いで使っています。
プログラムにしますと、
package test;
/* Rensyu 練習用クラス
開発者 shade 作成日 1/1 */
public class Rensyu {
public static void main (String [] args){
int hitPoint = new java.util.Random().nextInt(51);
int select ;
String menu = "1.攻撃 / 2.防御 / 3.回復" ;
String name = "Shade" ;
String status= "" ;
if (hitPoint <= 10){
status = "瀕死 " ;
}
System. out .println( "名前:" +status+name);
System. out .println( "HP:" +hitPoint);
System. out .println();
System. out .println(menu);
select = new java.util.Scanner (System. in).nextInt();
switch (select){
case 1:System. out.println ("攻撃します。 …誰もいません!" );
break ;
case 2:System. out.println ("防御します。 けど、誰もいません!" );
break ;
case 3:System. out.println ("回復します。 とりあえず、寝ましょうか。" );
break ;
default :System.out .println ("1~3で選んでください。" );
break ;
}
}
}
結果は1を選ぶと、
名前:瀕死 Shade
HP:2
1.攻撃 / 2.防御 / 3.回復
1
攻撃します。 …誰もいません!
4を選ぶと、
名前:Shade
HP:28
1.攻撃 / 2.防御 / 3.回復
4
1~3で選んでください。
といったようになります。
勿論、正規のプログラムであれば、一つのクラスで処理する内容ではありません。
メニュー用のクラス、キャラクター用のクラスなど処理ごとに分ける必要があります。
これでは、Javaプログラミングではないのです。
とりあえず、コードの書き方に慣れるための練習ということで・・・。
Java SE Silverの試験でも、Switchは出たような。。。
switch (select){
case 1:System. out.println ("攻撃します。 …誰もいません!" );
break ;
case 2:System. out.println ("防御します。 けど、誰もいません!" );
break ;
case 3:System. out.println ("回復します。 とりあえず、寝ましょうか。" );
break ;
default :System.out .println ("1~3で選んでください。" );
break ;
}
たとえば、case3のbreakを書き忘れた場合に、3を選択するとどうでしょう、
回復します。 とりあえず、寝ましょうか。
1~3で選んでください。
上記のように、breakがあるとこまで、次の処理も行ってしまいます。
コードの入力の正確さって大事ですね。
ちなみに、整数以外の文字列が入力された場合は、
名前:Shade
HP:45
1.攻撃 / 2.防御 / 3.回復
あああ
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at test.Rensyu.main( Rensyu.java:22 )
このようにエラーが返されます。これは、selectがint型で宣言されているためです。
回避する方法はあります。ただし、このペースだと、だいぶ先になりそうですw