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

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

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

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

Q&A

解決済

1回答

7083閲覧

Java switch文練習 キーボード入力文字列で条件分岐させたい

Abeginner

総合スコア29

Java

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

0グッド

0クリップ

投稿2016/11/07 04:56

Windows10でEclipseを用いてJavaの勉強をしています。

switchを使ったプログラムの練習として、参考書の例を少し変えて、以下のようなプログラムを組みました。

Java

1package practice1; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6 7public class test9 { 8 public static void main(String[] args) throws IOException 9 { 10 System.out.println("あなたの血液型を半角英字で入力して下さい。"); 11 12 BufferedReader br = 13 new BufferedReader(new InputStreamReader(System.in)); 14 String str=br.readLine(); 15 char res = str.charAt(0); 16 17 switch(res){ 18 case 'A': 19 System.out.println("日本人の40%があなたと同じ血液型です。"); 20 break; 21 case 'B': 22 System.out.println("日本人の20%があなたと同じ血液型です。"); 23 break; 24 case 'O': 25 System.out.println("日本人の30%があなたと同じ血液型です。"); 26 break; 27 default: 28 System.out.println("あなたと同じ血液型の人は日本にほとんどいません。"); 29 break; 30 } 31 32 } 33}

しかし、これでは「AB」と入力すると、case'A'だと判断されてしまいます。
つまり1文字しか認識されていないのだと思うのですが、キーボード入力のプログラムの書き方が悪いのか、switch文が悪いのか自分で判断ができず、上手く調べることすらできません。

本当は、このプログラムはA、B、Oの次にABのパターンを分岐させて、defaultは"半角英字でABO型の血液型を入力して下さい。"とでも表示させようかと思っています。
AとABを区別して認識してもらうようにするには、どこを改良すればよいのでしょうか?

ご指導のほどよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

java

1char res = str.charAt(0); //先頭文字を取っている。

あとは'A'"A"の違いと
switch文にstringが使えるのはJava7からということに注意してください。

投稿2016/11/07 05:08

編集2016/11/07 05:16
ozwk

総合スコア13521

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

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

Abeginner

2016/11/07 05:25

もしかして、15行目のcharがそもそもいらなくて、 switch(str)で分岐させ、 case"A"、case"B" …と書いていけばOKということでしょうか?
ozwk

2016/11/07 05:33

はい。 「キーボード入力のプログラムの書き方が悪いのか、 switch文が悪いのか自分で判断」する方法ですが、 簡単には変数の中身を見ればいいのです。 今回の場合だと、例えば"AB"と打てばstrには"AB"が入っててresには'A'が入るわけですから res = ... がおかしいなと勘付けるわけです。
Abeginner

2016/11/07 05:43

>簡単には変数の中身を見ればいいのです。 なるほど! ありがとうございます!! 授業でも、文法なんかどうでもいいから、こういうことを教えて欲しかった… ついでで恐縮ですが、 char の使い方も教えて頂けますでしょうか? 先頭の1文字しかとれないとなると、使い方がかなり限られてくると思うのですが、一体どういう時に使うのですか?
ozwk

2016/11/07 05:55

文字列型の変数strの0文字目をとって(str.charAt(0))それをchar型の変数resにいれているのであって、 charが文字列の一文字目じゃないです。
Abeginner

2016/11/07 06:15

文字列を格納するのに、char型とString型があって、 char型は1文字だけ扱う。'X'という風に文字を囲む。ユニコードエスケープで特殊文字を指定することも可能。 String型は文字列を扱う。"XYZ"という風に文字列を囲む。ユニコードエスケープは使えない。 String型をそのままchar型に入れ直すと1文字目だけ抜き出す。プログラムの書き方次第で、3文字目だけ抜き出すとか、文字列の文字を1つ1つバラバラに格納するようなことも可能。 …という理解であってますか?
Abeginner

2016/11/07 06:21

あ、いや、str.charAt(0)が0文字目を抜き出してるのであって、str.charAt(2)だと3文字目を指定するのか! あってます?
swordone

2016/11/07 06:23

横から失礼、 ユニコードエスケープはどこでも使えます。コンパイル時に、何よりもまずユニコードの解釈を行います。 なので、"の代わりに"に相当するユニコードを入れても問題ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問