@QBmiXMBhsB8l4Er
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A
Closed

Java「変数strAは初期化されていない可能性があります」エラーの原因

Q&A
Closed

Javaにて、「コンピュータAとBのじゃんけんをランダムに実行し結果を表示する」コードを書いています。
以下のようにString型で変数strAとstrBを定義して場合分けして代入しましたが「変数strAは初期化されていない可能性があります」とエラーが出てしまいます。原因や解決策を教えていただけたら幸いです。

qiita.rb
import java.util.Random;


public class Janken {
  public static void main(String args[]) {

    Random rand = new Random(Integer.valueOf(args[0]));
    int comA = rand.nextInt(3);
    int comB = rand.nextInt(3);
    String strA, strB;
    switch(comA){
      case 0 :
      strA = "グー";

      case 1 :
      strA = "チョキ";

      case 2 :
      strA = "パー";
    }
    switch(comB){
      case 0 :
      strB = "グー";

      case 1 :
      strB = "チョキ";

      case 2 :
      strB = "パー";
    }
    if(comA == comB){
      System.out.println(
        "コンピュータA:" + strA
        );
      System.out.println(
        "コンピュータB:" + strB
        );
      System.out.println(
        "あいこ"
        );
    }
    else if(((comA == 0) && (comB == 1)) || ((comA == 1) && (comB == 2)) || ((comA == 2) && (comB == 0))){
      System.out.println(
        "コンピュータA:" + strA
        );
      System.out.println(
        "コンピュータB:" + strB
        );
      System.out.println(
        "コンピュータAの勝ち"
        );
    }
    else{
      System.out.println(
        "コンピュータA:" + strA
        );
      System.out.println(
        "コンピュータB:" + strB
        );
      System.out.println(
        "コンピュータAの負け"
        );
    }
    }
  }
0
1
Answer

switchの前に strAに何か値を入れていないのが原因です。
以下のように初期化をするとエラーが消えるのではないでしょうか。

strA = "";
strB = "";

また、範囲外の数値がきたときに switch文の case に引っかからない場合があります。
default も指定しておくとよいでしょう。

1
回答ありがとうございます。初期化してdefaultも指定しましたが、
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Main.main(Main.java:8)
と出てしまいました。
引数を指定していないからだと思います。



$ java Janken.java
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Janken.main(Janken.java:7)

$ java Janken.java 1
コンピュータA:
コンピュータB:
コンピュータAの勝ち

$ java Janken.java 2
コンピュータA:
コンピュータB:
コンピュータAの負け

$ java Janken.java 3
コンピュータA:
コンピュータB:
あいこ
switch文にbreakを忘れているようです。以下に修正版を書きました。

https://qiita.com/tukiyo3/items/6f612b5ba03fc712a647
返信が遅れて申し訳ありません。本当にありがとうございます!
View the remaining 3 comments.
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login