LoginSignup
QBmiXMBhsB8l4Er
@QBmiXMBhsB8l4Er

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

Q&AClosed

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

1Answer

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

strA = "";
strB = "";

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

1

Comments

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



    $ 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:
    あいこ
  3. 返信が遅れて申し訳ありません。本当にありがとうございます!

Your answer might help someone💌