アフィリエイト広告を利用しています


スキル無しのシステムインストラクターから、システムエンジニアへの転身日記。
◇◆◇ 2013年取得資格
LPICレベル1
LPICレベル2
LPICレベル3 Core
LPICレベル3 Speciality 302
LPICレベル3 Speciality 303
LPICレベル3 Speciality 304

Cisco CCENT
Cisco CCNA

Java SE 7 Silver
Java SE 7 GOLD

OSS-DB Silver

◇◆◇ 2014年取得資格
HTML5 Professional レベル1

広告

posted by fanblog

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

トラックバック

この記事へのトラックバックURL
※ブログオーナーが承認したトラックバックのみ表示されます。
https://fanblogs.jp/tb/2006067

コメント

お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのコメント

Prix Prograf|2021年09月12日(Sun) 06:20
はびさん

こんばんは。
レス遅くなってすみません。

確かに多重ifは見づらいですね。
自分で書いたものでも、あとで見直すのも嫌になっちゃうことがありました。

確かに、あとで条件が増えることを考えるとケース文は、メンテナンスしやすいかもしれませんね。

処理時間を意識したコーディングができるのは、いつになるやら。。。ですが、頭にいれておきます。
3桁のcase文。。。。
shade|2014年01月24日(Fri) 22:58
Shade さん

こんばんはっ Switch 大好きっ子の Habitat ですっ

私が組むときはどうしても後々のメンテナンス性を考えてしまうので、3つぐらいの条件式でも case 文使っちゃいますね。。

まぁ(仕様を意図させるような場合など)ケースバイケースなんですけど、微妙に if 文やら switch case が入り乱れてると、見るほうがうんざりしちゃうから。。

あと、if 文に比べて条件比較が簡潔にすむので処理時間が早いのも魅力ですね。。

case の条件が3桁wwとかになると、コード生成用のPG組んでエイヤッ!でやっつけが出来るのもイイッ!
Habitat|2014年01月19日(Sun) 21:58
Eimeeさん

こんばんはー。書き込みありがとうございます。
勉強になればいいのですが、あくまでまったくJavaを触らなくなった自分への刺激記事です。
単発単発でコードの書き方を思い出していきます。
しばらくお付き合いくださいませ。

SE7になると、増えますね。私は、6を受けていないのでそれが普通になってしまいました。

InputMismatchException、名前の通りですね。
対処法としては、try-catchを使います。この辺も試験に出てました。多分ww

自分で使ってみないことには、何のことだかさっぱりわからないと思います。
いや、逆にわからないまま問題が解けるのも、ある意味凄いんですけどね。

まず、自分の好きな分野をプログラムに置き換えてみると、はかどりますよ。
私は、これを業務システムでたとえてと言われても、うーん…となりますけどww
shade|2014年01月15日(Wed) 21:37
こんばんは!勉強させて頂いてますー!
InputMismatchException。。早速わかりません><
何となく意味はわかるんですが、使った教科書には載っていないです・・。(私がちゃんと勉強してなかっただけです)
やっぱりSE7になると範囲が増えるんですよね・・難しそう。。
OJCPはトラウマなのでUpgrade試験受ける勇気がでません。。。

RPGの処理に例えて勉強されるって素敵ですね☆

知識だけは覚えたものの、結局何のために使う機能なのかさっぱりのまま終わってしまった内容が多いような感じがします。。
イメージできるって大事ですね!


Eimee|2014年01月15日(Wed) 20:57
   
×

この広告は30日以上新しい記事の更新がないブログに表示されております。