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

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

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

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

Q&A

解決済

3回答

360閲覧

java 変数が値が含まれていない

hiro.a

総合スコア28

Java

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

0グッド

0クリップ

投稿2020/03/25 01:38

編集2020/03/25 01:54
java ``` コード ```equalsを簡単なゲームを作成しています。 ですが、if文での処理にて変数の値が受け取れません 変数 resultが初期化できていませんと表示されますが 初期化するのではなく、引継ぎをしたいのですが、初歩的な質問にはなりますがよろしくお願い致します。 public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("******"); System.out.println("*High & Low*"); System.out.println("******"); System.out.println(); int leftCard = (int)(Math.random()*9)+1; System.out.println(" [問題表示] "); System.out.println("* *"); System.out.println("* * * * *"); System.out.println("* " +leftCard + " * * * *"); System.out.println("* * * * *"); System.out.println("* *"); System.out.println("High or Low ?(h/l) > "); String select = sc.nextLine(); if (select.equals("h")) { System.out.println("→Highを選択しました。"); } else { System.out.println("→Lowを選択しました。"); }; System.out.println(""); System.out.println("[結果表示]"); System.out.println("* *"); System.out.println("* * * *"); int rightCard = (int)(Math.random()*9)+1; System.out.println("* +leftCard+ * * +rightCard+ *"); System.out.println("* * * *"); System.out.println("* *"); String result ; if (leftCard < rightCard) { result = "h" ; } else if (leftCard >rightCard ) { result = "l"; } else if ( leftCard == rightCard) { result = select ; }; if (result.equals(select)) { System.out.println("→You Win!"); } else if (result != select) { System.out.println("→you Lose..."); }; System.out.println(""); System.out.println("--ゲーム終了--"); } }

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

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

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

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

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

m.ts10806

2020/03/25 01:40

コードはマークダウンのcode機能を利用してご提示ください。
hiro.a

2020/03/25 01:42

失礼しました。修正します。
m.ts10806

2020/03/25 01:43

なんでしょう。「引き継ぎをしたい」とは。 初期化されてないというエラーなら初期値を設定すればいいのでは?
m.ts10806

2020/03/25 01:56

質問投稿前にプレビュー確認しましょう。
m.ts10806

2020/03/25 04:21

質問未解決のまま次々と投稿するのはやめてください。 解決する気がないように感じます。 「受付中」のままの質問を放置しすぎです。
guest

回答3

0

java

1String result ; 2if (leftCard < rightCard) { 3result = "h" ; 4} else if (leftCard >rightCard ) { 5result = "l"; 6} else if ( leftCard == rightCard) { 7result = select ; 8};

残念ながら、Javaコンパイラは「ifの3ついずれかの条件に入る」ということを認識できません(仮にleftCardrightCarddoubleだった場合、NaNという特殊な値が入れば3つとも成立しないパターンは作成可能です)。

最後のelse ifelseに変えて、必ず通るようにしておきましょう。

投稿2020/03/25 01:45

maisumakun

総合スコア146018

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

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

0

ベストアンサー

質問者のこだわりが全く分からないのですけど、

ここを

java

1String result ; 2if (leftCard < rightCard) { 3 result = "h" ; 4} else if (leftCard >rightCard ) { 5 result = "l"; 6} else if ( leftCard == rightCard) { 7 result = select ; 8}

↓こう変えるだけで終わる話ではないかな

java

1String result = select; 2if (leftCard < rightCard) { 3 result = "h" ; 4} else if (leftCard >rightCard ) { 5 result = "l"; 6}

これで最後の同じかどうかって判定は、なくてもよくなると思います。

投稿2020/03/25 04:12

m.ts10806

総合スコア80875

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

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

hiro.a

2020/03/25 04:27

確かにそうですね!ありがとうございます。
m.ts10806

2020/03/25 04:28

なぜこれで通るかご理解の上での解決済みなら良いのですけど。
guest

0

まず、「変数が初期化されていない」というのは、宣言だけして1度も代入していない状態です。
初期化されていない変数を(代入以外で)使おうとすると、「変数~~~を初期化してください」と怒られます。

今回のコードでは、

java

1String result ; 2if (leftCard < rightCard) { 3 result = "h" ; 4} else if (leftCard >rightCard ) { 5 result = "l"; 6} else if ( leftCard == rightCard) { 7 result = select ; 8};

の部分で、実際にはどんなケースでもresultには何かしらの値が代入されますが、コンパイラは頭が悪いので、
「どの条件も満たさなかった場合はresultが初期化されない」と判断してしまいます。
なので、コンパイラが見ても明らかに初期化されているように書く必要があります。

例えば宣言時に適当な値を入れて初期化するか:

java

1String result == ""; 2if (leftCard < rightCard) { 3 result = "h" ; 4} else if (leftCard >rightCard ) { 5 result = "l"; 6} else if ( leftCard == rightCard) { 7 result = select ; 8};

一番最後の条件をelseにします :

java

1String result ; 2if (leftCard < rightCard) { 3 result = "h" ; 4} else if (leftCard >rightCard ) { 5 result = "l"; 6} else { 7 result = select ; 8};

投稿2020/03/25 01:42

編集2020/03/25 02:52
ozwk

総合スコア13553

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

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

maisumakun

2020/03/25 01:47

leftCardやrightCardがintである以上、「どの条件も満たさなかった場合」は実際には発生しないかと思います。
hiro.a

2020/03/25 01:50

初期化してしまうと今までの処理が引き継がれずになると言う事ですよね?
ozwk

2020/03/25 01:51 編集

@maisumakun ...と言われたらコンパイラはそんな賢くないです云々と返そうと思ってたんですけど よく考えたら予め書いておいたほうがスムーズに事が運びましたね。
ozwk

2020/03/25 02:00 編集

「引き継がれずになる」ってなんですか? 何が聞きたいのかわかりません。 引き継がれずに(なにがどう)なるんですか?
hiro.a

2020/03/25 02:01

わかりましたありがとうございます。
jimbe

2020/03/25 02:13

> 初期化してしまうと今までの処理が引き継がれず 初期化しろと言われているのは, 変数であって, 処理ではありません.
hiro.a

2020/03/25 02:25

leftCardとに対してrightCardの数字を比較するゲームになります。 if文を利用してresult・selectに値を代入してきた中でresultの値を初期化してしますと意味が無いのでは無いかと思っています。 「引き継がれずになる」ってなんですか? 何が聞きたいのかわかりません。 引き継がれずに(なにがどう)なるんですか?→私の誤字と説明不足です。
maisumakun

2020/03/25 02:27

> resultの値を初期化してしますと意味が無いのでは無いかと思っています。 いえ、正反対です。初期化しないローカル変数は、コンパイルエラーになります。
hiro.a

2020/03/25 02:27

初期化すると変数に代入されていた値を新たに代入すると言う認識ですが間違ってますか?
maisumakun

2020/03/25 02:29

> 初期化すると変数に代入されていた値を新たに代入すると言う認識ですが間違ってますか? はい、違います。この場面での「初期化」は、「変数の最初の値を決める」という意味です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問