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

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

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

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

Q&A

解決済

4回答

1085閲覧

java switch文について

tmp0

総合スコア21

Java

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

0グッド

0クリップ

投稿2020/08/25 07:17

switch文についてのお尋ねです。
switch文とは言っておりますがスイッチ文の引数やこの式の私の理解度について誤差や認識の違いをご指摘いただければと思います。
str1のフィールドにはa~kの文字列が入っています。
str2のフィールドにはnullが入っている。nullは何もないときの処理?と理解しています。
ここまでは大丈夫でしょうか。

本題はスイッチ文の中の(str1.charAt(5))というものについてです。
①char型の配列の5番目を受け取りたいと言っているの?
②()じゃなくて[]じゃないの?と思ってしまいました。
③5番目なら私のこれまでの勉強では
0:a 1:b 2:c 3:d 4:e  (全部で5ある)
なのでcase'e'に当てはまるのでは?と混乱しています。
④最後にswitchの処理の中でもprintlnの中でもstr2を指定しているのはstr1と参照が同じだから問題なく表示されている。という認識で間違い無いでしょうか。

コード public class Main { public static void main(String[] args){ String str1 = "abcdefghijk"; String str2 = null; switch(str1.charAt(5)){ case 'e': str2 = "char E"; break; case 'f': str2 = "char F"; break; default: str2 = "other"; } System.out.println(str2); } }

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

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

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

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

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

maisumakun

2020/08/25 07:19

前の質問とも重なりますが、char[]とStringは、Javaでは別な型です。しっかり区別してください。
m.ts10806

2020/08/25 07:54

そもそもシングルクォートでは動かないですよ。コンパイルも動作もさせてないコード載せるのやめませんか? 本題よりまえに突っ込む内容が多すぎて、それ以前の問題です。 厳しめに言うとお話になりません
tmp0

2020/08/25 08:14

maisumakunさん、了解しました。ありがとうございます。 javabronze問題集の一例を載せさせて頂きました。コードについて実際に書いてコンパイル、実行まで済んだ上で理解できていない部分をお尋ねさせて頂いている次第です。 ご指摘ありがとうございます。
m.ts10806

2020/08/25 08:28 編集

シングルクォートでコンパイル通るはずがないです。構文エラーです。 →charは通るんですね(Stringは通らない)。失礼しました。なかなか使わない表現だったもので。
guest

回答4

0

ベストアンサー

①char型の配列の5番目を受け取りたいと言っているの?

違います。これはStringのメソッドです(Oracle)。

②()じゃなくて[]じゃないの?と思ってしまいました。

メソッド呼び出しなので、丸括弧です。

③5番目なら(中略)なのでcase'e'に当てはまるのでは?

えっ?「4:e」と自分で書いていますよね?
(上のリンク内に書かれていますが、charAtメソッドも先頭が0として数えます)

④最後にswitchの処理の中でもprintlnの中でもstr2を指定しているのはstr1と参照が同じだから問題なく表示されている。という認識で間違い無いでしょうか。

完全に間違っています。str1str2は全く別個に存在する変数です(値も異なるので、参照が一致することもありません)。

投稿2020/08/25 07:22

編集2020/08/25 07:32
maisumakun

総合スコア146018

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

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

maisumakun

2020/08/25 07:34

「str1と参照が同じだから」というのは、何を根拠にそういう考えに至ったのでしょうか? (もしかすると、用語の使い方が違うということも考えられます)
tmp0

2020/08/25 08:07

勘違いしていたようです。大変失礼いたしました。
guest

0

本題はスイッチ文の中の(str1.charAt(5))というものについてです。

StringクラスのcharAtメソッドを実引数5で呼び出しています。メソッドの呼び出しなので[]ではなく()がつきますね。

引数の5はインデックスの指定なのですが、先頭の文字を取り出すときのインデックスが0なので、先頭から1文字目、2文字目、……と数えたとすると6文字目に当たります。つまり、取り出される文字は「f」です。

調べた結果をわかりやすく表示するための文字列をstr2に設定しています。文字列の内容は、char Echar Fotherのいずれかです(今回はchar Fが設定される)。これはstr1とは何の関係もありません。

投稿2020/08/25 07:38

Daregada

総合スコア11990

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

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

tmp0

2020/08/25 08:08

ありがとうございます。未熟者ですみません。
guest

0

本題はスイッチ文の中の(str1.charAt(5))というものについてです。

charAt()は、Stringクラスのメソッドです。
引数の位置の文字をchar型のデータとして返します。

①char型の配列の5番目を受け取りたいと言っているの?

JAVAは、C言語とは違い、String型とchar型配列とは、まったくの別物です。

②()じゃなくて[]じゃないの?と思ってしまいました。

charAt()は、Stringクラスのメソッドです。
メソッドの引数は()で指定します。

③5番目なら私のこれまでの勉強では

0:a 1:b 2:c 3:d 4:e  (全部で5ある)

この「全部で5ある」の意味がよくわかりません。

0:a 1:b 2:c 3:d 4:e  (全部で5ある)

なのでcase'e'に当てはまるのでは?と混乱しています。

ここの「なので」のつながりも、
その結果の「case'e'に当てはまる」と判断した理由もよくわからないです。

④最後にswitchの処理の中でもprintlnの中でもstr2を指定しているのはstr1と参照が同じだから問題なく表示されている。という認識で間違い無いでしょうか。

ちょっとこれも言っている意味がよくわかりません。
str1str2は、別の変数ですし、参照先も全く別です。

投稿2020/08/25 07:33

amiya

総合スコア1218

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

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

tmp0

2020/08/25 08:10

ご丁寧にありがとうございました。
guest

0

str2のフィールドにはnullが入っている。nullは何もないときの処理?と理解しています。

この認識は違います。
変数にはスコープというものがあり、外側で宣言した変数は内側で参照できますが逆はできません。
switch内でstr2を宣言しても外側のSystem.out.printlnで参照できないため、
switch処理内での結果を出力させるために外側で宣言しています。

④最後にswitchの処理の中でもprintlnの中でもstr2を指定しているのはstr1と参照が同じだから問題なく表示されている。という認識で間違い無いでしょうか。

上でも書いてますが、str1がどうと言うより、
switchの外側のスコープに当たるSystem.out.printlnでswitch内での処理の結果を参照させたいためです。

①char型の配列の5番目を受け取りたいと言っているの?

③5番目なら私のこれまでの勉強では0:a 1:b 2:c 3:d 4:e  (全部で5ある)

いいえ、人間的な数え方でaを1番目とするなら6番目のfを取得しています。
実際にこのソースを実行してみればわかりますが、
case 'f'の結果の"char F"がコンソールに出力されます。

投稿2020/08/25 08:08

yureighost

総合スコア2183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問