下記のようなswitch文に
もうひとつの変数
int tmp = Integer.valueOf(変数2).intValue();を代入したいのですが
もう一つ代入できるのでしょうか??
因みにswitch文にIF文を加えて変数を代入するのではなく
switch文で複数の変数を使用したいのです。
どうぞよろしくお願いいたします。
なお、質問の意味が分からない、意図が伝わらない方は
アドバイスはいりませんので
恐縮ですがアドバイスお願いいたします。
int lot = Integer.valueOf(変数1).intValue();
switch (lot) {
case 1: out.print("OK"); break;
case 2: out.print("NG"); break;
default: out.print("エラー"); break;}
}
No.1ベストアンサー
- 回答日時:
とは言われても
> もうひとつの変数
> int tmp = Integer.valueOf(変数2).intValue();を代入
というのが、プログラミング用語として意味不明な使い方になっているので、意図が伝わる人の方が少ないと思いますが。
※ 代入とは、「変数等に値を設定すること」です。
int tmp = Integer.valueOf(変数2).intValue(); は「変数tmpにInteger.valueOf(変数2).intValue()を代入」ですが、
「int tmp = Integer.valueOf(変数2).intValue();を代入」だと「どの変数に?何を?」となります。
switch (lot,tmp) { // もしかして、こういう風にすることを「代入」と呼んでいませんか?だとしたら、他人には伝わりません
case 1,1: out.print("lot OK,tmp OK"); break; // lot==1,tmp==1のとき
case 1,2: out.print("lot OK,tmp NG"); break; // lot==1,tmp==2のとき
case 2,1: out.print("lot NG,tmp OK"); break; // lot==2,tmp==1のとき
case 2,2: out.print("lot NG,tmp NG"); break; // lot==2,tmp==2のとき
default: out.print("エラー"); break;
}
のように、2つの値で分岐したい、というのなら
「できません。あきらめて別の方法(if等)を使ってください」
が答えです。
どうしてもifがいやなら、switchの中にswithを書くことはできます
switch (lot) {
case 1:
switch(tmp){
case 1: out.print("lot OK,tmp OK"); break;
case 2: out.print("lot OK,tmp NG"); break;
default: out.print("エラー"); break;
}
break;
case 2:
switch(tmp){
case 1: out.print("lot NG,tmp OK"); break;
case 2: out.print("lot NG,tmp NG"); break;
default: out.print("エラー"); break;
}
break;
default: out.print("エラー"); break;
}
lot,tmpから、区別のつく一つの数値を求めれば、一つのswitchで分岐させることはできます。
switch (lot * 10 + tmp) {
case 11: out.print("lot OK,tmp OK"); break; // lot==1,tmp==1のとき,lot*10+tmp=11 以下同様
case 12: out.print("lot OK,tmp NG"); break;
case 21: out.print("lot NG,tmp OK"); break;
case 22: out.print("lot NG,tmp NG"); break;
default: out.print("エラー"); break;}
}
この例だと、lotやtmpに期待していない値が入っていると誤動作しますが。
# lot = 0 ; tmp = 11; と本来エラーになる値が入っていた場合
# lot*10+tmp=11で "lot OK,tmp OK"になる
int lot_tmp=0;
switch (lot) {
case 1: lot_tmp += 10; break;
case 2: lot_tmp += 20; break;
}
switch (tmp) {
case 1: lot_tmp += 1; break;
case 2: lot_tmp += 2; break;
}
switch (lot_tmp) {
case 11: out.print("lot OK,tmp OK"); break;
case 12: out.print("lot OK,tmp NG"); break;
case 21: out.print("lot NG,tmp OK"); break;
case 22: out.print("lot NG,tmp NG"); break;
default: out.print("エラー"); break;}
}
これだと、先のような誤判定はなくなります。が。switchがいっぱいで読みにくいです
前半部の計算を
int method1(int a,int b) {
int ret=0;
switch (a) {
case 1: ret += 10; break;
case 2: ret += 20; break;
}
switch (b) {
case 1: ret += 1; break;
case 2: ret += 2; break;
}
return ret
}
と、別のメソッドにすれば
switch (method1(lot,tmp)) {
// caseの10の位: lotの値
// caseの1の位: tmpの値
case 11: out.print("lot OK,tmp OK"); break;
case 12: out.print("lot OK,tmp NG"); break;
case 21: out.print("lot NG,tmp OK"); break;
case 22: out.print("lot NG,tmp NG"); break;
default: out.print("エラー"); break;}
}
これだと、あなたがやりたいことに近いかもしれません。
計算部分と、値を使うところが離れるので、あとでわかるようにコメントを入れておきましょう
この回答への補足
前半部の計算を
int method1(int a,int b) {
int ret=0;
switch (a) {
case 1: ret += 10; break;
case 2: ret += 20; break;
}
switch (b) {
case 1: ret += 1; break;
case 2: ret += 2; break;
}
return ret
}
と、別のメソッドにすれば
switch (method1(lot,tmp)) {
// caseの10の位: lotの値
// caseの1の位: tmpの値
case 11: out.print("lot OK,tmp OK"); break;
case 12: out.print("lot OK,tmp NG"); break;
case 21: out.print("lot NG,tmp OK"); break;
case 22: out.print("lot NG,tmp NG"); break;
default: out.print("エラー"); break;}
}
これだと、あなたがやりたいことに近いかもしれません。
計算部分と、値を使うところが離れるので、あとでわかるようにコメントを入れておきましょう
上記のコメントいただいた方法を使用させていただきます。
分岐点が複雑なので助かりました。
どうもありがとうございました。
アドバイスありがとうございます。
違う言語のコードを提示しますと
ケース文の中にケース分を書きたいのです。
ただし1つのケースは04と決まってます。
IF分はその他の条件で使用したいので・・・
下記のような事をやりたいのです。
Select Case 設定1
Case "04" ケース04は固定です。
Select Case 設定2
Case "11"
If (CLng(金額1) <> 0 And (金額2) = 0 And CLng(金額3) = 0)) Then
tmp = "答え1"
Case "12"
If (CLng(金額1) <> 0 And (金額2) = 0 And CLng(金額3) = 0)) Then
tmp = "答え2"
あまり用語を知らずに細かく説明すると
ご回答者様が把握しずらいのですが
これをjavaでやろうとしていることが伝わりますでしょうか??
No.3
- 回答日時:
ですから
> どうしてもifがいやなら、switchの中にswithを書くことはできます
> switch (lot) {
> case 1:
> switch(tmp){
> case 1: out.print("lot OK,tmp OK"); break;
(以下略)
って書いてますけど?
そのVBのソースだって「二つの値で分岐」なんてしていません
Select Case 設定1
Case "04" ケース04は固定です。
' 設定1が"04"の時の処理
...
という「設定1だけでのSelect Caseによる分岐」があって、
その中の「設置1が"04"の時の処理」が
Select Case 設定2
Case "11"
...
End Select
と、「設定2だけでのSelect Caseによる分岐」になっています。
Javaでの「一つの値だけでのswitchによる分岐」とまったく同じ構造です。
# こういう構造になっているのは理解してますよね?
Javaでもまったく同様に
switch(設定1) {
case 4:
// 設定1が4のときの処理
break; // VBと同様にするには、breakが必要
}
があって、「設定1が4のときの処理」として
switch(設定2) {
case 11:
// 設定2が11のときの処理
break;
...
}
という構造にすればいいだけでは?
これまでのバージョンでは、switchにはenumか整数しか使えなかったのですが、Java SE 7では、文字列も使えるようになったそうです。
case "04": など、VBと同様の書き方ができます。
> IF分はその他の条件で使用したいので・・
これが、意味も意図も不明です。
switchとifは、都合のいい方、ソース読んでわかりやすい方、やりたい条件分岐が可能な方を選べばいいだけです。
他で使いたいからといって、ここで使ってはいけない、ということは無いでしょう。
この回答への補足
if分はその他の条件で使用したいというのは、
スイッチの中でifを書くのに対して、自分自身が
分かりやすくする為だけに、
スイッチの中でスイッチを書いて
更にIfを書きたいと
いったわがままなだけになります。
毎回アドバイスどうもありがとうございます。
先ほどのお礼で私なにか質問しましたでしょうか??
これでやりたいことが伝わりますか?と報告しただけです。
最初の投稿で記述していただいた
スイッチ分文の中にスイッチ文を書く方法(その他のソース含む)
を教えていただいたので
これから参考にしようと思ったのです。
No.2
- 回答日時:
この質問文からそのような意図を読み取るのは不可能... というか, 「それ以外の意図」でさえ読み取るのはほぼ不可能. 「あまり用語を知らずに細かく説明するとご回答者様が把握しづ (×ず) らい」と書いてるけど, この (そしてこれまでのあなたの) 質問文がまさにそう. 「用語を理解せず書いているためほかの人が解釈できない」文章になっていることは自覚してほしい.
でその意図ならそれと同じことをやればいい. それだけ.
この回答への補足
ご指摘どうもありがとうございます。
用語の認識不足については恐縮です。
ただ私が理解できないことは
質問の意味が全く分からないのに
質問をしてくることです。
もし本当に言っている意味が全く分からなければ
なにも出来ないはず。
分かりやすく言うとまったく分からない
外来語で話しかけられても何もできないことと一緒です。
つまりなんとなく憶測や、こうしたいんだろうなみたいなことが
伝わってないと会話も出来ないはずです。
追加になってしまいますが
他の人が解釈できない事は自覚してほしいと書いてあって
その意図ならそれと同じことをやればいいだけとありますが
アドバイスには受け取れません。
第一、その意図ならと発言した時点で、
投稿した質問は少なくとも分かっているはず。
ただそれをやればいいというのであれば
いうまでもなくこちらから投稿はしてないはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Ruby プログラミング 3 2023/06/09 14:30
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- Ruby パイソンプログラミング 2 2022/12/03 18:44
- その他(プログラミング・Web制作) powershell で書いたプログラムでcd が動かない 5 2023/04/08 14:47
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
system.out.printが出力されない
-
Log4jで機能毎に別ファイルへ出...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
Eclipseのコンソールを常に表示...
-
JavaScriptの変数をjavaのメソ...
-
1~100までの数字を表示し、か...
-
ArrayListによる計算表作成
-
半角カナが含まれる文字列をフ...
-
System.out.printlnの出力先
-
InputStreamはreadが1回しかで...
-
数字文字列をパック10進数に変...
-
VBSエラー"オブジェクト型の変...
-
Apache POI のログについて
-
java for文、if文を使っての三角形
-
java ファイル操作について
-
Tomcatが無応答となる現象が起...
-
JavaScriptでcgiの戻り値を受け...
-
Javaで任意のパスへ任意のファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
1~100までの数字を表示し、か...
-
Eclipseのコンソールを常に表示...
-
system.out.printが出力されない
-
JAVAのServletで、画像表示につ...
-
1~100までの数字を表示したい
-
テキストエリアで改行する
-
switch分が機能しません。
-
Tomcatが無応答となる現象が起...
-
一定のスペースを空けて端を揃...
-
数字文字列をパック10進数に変...
-
JavaScriptの変数をjavaのメソ...
-
バイトスワップ
-
Java 九九の表について
-
tomcatのstdout.logを停止したい。
-
ダブルクォーテーション(””)...
おすすめ情報