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
【Javaの最新記事】
この記事へのコメント
https://www.ringeraja.hr/forum/Prix_Lunesta_%24_Lunesta_Pas_Cher_Tout_Compris/m_974510/tm.htm
https://www.ringeraja.hr/forum/Sconti_Ativan_(!_Acquista_Ativan_online/m_966575/tm.htm
https://www.ringeraja.hr/forum/Precio_Ativan_)_Ativan_spanish/m_961115/tm.htm
https://www.ringeraja.hr/forum/Achat_Modalert_%24_pharmacie_en_ligne_france_Modalert/m_962393/tm.htm
こんばんは。
レス遅くなってすみません。
確かに多重ifは見づらいですね。
自分で書いたものでも、あとで見直すのも嫌になっちゃうことがありました。
確かに、あとで条件が増えることを考えるとケース文は、メンテナンスしやすいかもしれませんね。
処理時間を意識したコーディングができるのは、いつになるやら。。。ですが、頭にいれておきます。
3桁のcase文。。。。
こんばんはっ Switch 大好きっ子の Habitat ですっ
私が組むときはどうしても後々のメンテナンス性を考えてしまうので、3つぐらいの条件式でも case 文使っちゃいますね。。
まぁ(仕様を意図させるような場合など)ケースバイケースなんですけど、微妙に if 文やら switch case が入り乱れてると、見るほうがうんざりしちゃうから。。
あと、if 文に比べて条件比較が簡潔にすむので処理時間が早いのも魅力ですね。。
case の条件が3桁wwとかになると、コード生成用のPG組んでエイヤッ!でやっつけが出来るのもイイッ!
こんばんはー。書き込みありがとうございます。
勉強になればいいのですが、あくまでまったくJavaを触らなくなった自分への刺激記事です。
単発単発でコードの書き方を思い出していきます。
しばらくお付き合いくださいませ。
SE7になると、増えますね。私は、6を受けていないのでそれが普通になってしまいました。
InputMismatchException、名前の通りですね。
対処法としては、try-catchを使います。この辺も試験に出てました。多分ww
自分で使ってみないことには、何のことだかさっぱりわからないと思います。
いや、逆にわからないまま問題が解けるのも、ある意味凄いんですけどね。
まず、自分の好きな分野をプログラムに置き換えてみると、はかどりますよ。
私は、これを業務システムでたとえてと言われても、うーん…となりますけどww
InputMismatchException。。早速わかりません><
何となく意味はわかるんですが、使った教科書には載っていないです・・。(私がちゃんと勉強してなかっただけです)
やっぱりSE7になると範囲が増えるんですよね・・難しそう。。
OJCPはトラウマなのでUpgrade試験受ける勇気がでません。。。
RPGの処理に例えて勉強されるって素敵ですね☆
知識だけは覚えたものの、結局何のために使う機能なのかさっぱりのまま終わってしまった内容が多いような感じがします。。
イメージできるって大事ですね!