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

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

ただいまの
回答率

87.49%

Java if文 一定の範囲の数字を評価値に直して合計値を出したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 668

score 5

javaでブラックジャックのカウンティングを行うプログラムを作成しています。

トランプの1から13までの数値を評価値に直してその合計を出したいです。

2~6の数字は評価値1,7~9の数字は評価値0,10~14の数字(1は14として扱う)は評価値-1

3枚のカード引いて、仮に10,10,10の3つの数値を得た場合に評価値はそれぞれ-1,-1,-1と

なりその値を合計すると-3となります。

評価値を出すところまではできたのですが評価値を合計する文がコンパイルする際にエラー

が表示されます。

エラー(3つ)は次の通りです。

シンボルを見つけられません。変数 num4 num5 num6
System.out.println("評価値の合計は" +(num4+num5+num6)+ "です。");

ソースコードは以下です。

import java.io.*;

class Counting
{
public static void main(String[] args) throws IOException
{
System.out.println("ディーラーのカード1枚と自分のカード2枚の数字を入力して下さい");

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();
String str2 = br.readLine();
String str3 = br.readLine();

int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
int num3 = Integer.parseInt(str3);

//ディーラーのカードの数 2~6
if(num1 >=2 && num1 <= 6 && num1 ==2){
System.out.println("評価値は" + (num1-1) + "です");
int num4 = (num1-1);
}

else if(num1 >=2 && num1 <= 6 && num1 ==3){
System.out.println("評価値は" + (num1-2) + "です"); 
int num4 = (num1-2);
}

else if(num1 >=2 && num1 <= 6 && num1 ==4){
System.out.println("評価値は" + (num1-3) + "です"); 
int num4 = (num1-3);
}

else if(num1 >=2 && num1 <= 6 && num1 ==5){
System.out.println("評価値は" + (num1-4) + "です"); 
int num4 = (num1-4);
}

else if(num1 >=2 && num1 <= 6 && num1 ==6){
System.out.println("評価値は" + (num1-5) + "です"); 
int num4 = (num1-5);
}

//ディーラーのカードの数 7~9

else if(num1 >=7 && num1 <=9 && num1 ==7){
System.out.println("評価値は" + (num1-7) + "です");
int num4 = (num1-7);
}

else if(num1 >=7 && num1 <=9 && num1 ==8){
System.out.println("評価値は" + (num1-8) + "です");
int num4 = (num1-8);
}

else if(num1 >=7 && num1 <=9 && num1 ==9){
System.out.println("評価値は" + (num1-9) + "です");
int num4 = (num1-9);
}

//ディーラーのカードの数 10~14
else if(num1 >=10 && num1 <=14 && num1 ==10){
System.out.println("評価値は" + (num1-11) + "です");
int num4 = (num1-11);
}

else if(num1 >=10 && num1 <=14 && num1 ==11){
System.out.println("評価値は" + (num1-12) + "です");
int num4 = (num1-12);
}

else if(num1 >=10 && num1 <=14 && num1 ==12){
System.out.println("評価値は" + (num1-13) + "です");
int num4 = (num1-13);
}

else if(num1 >=10 && num1 <=14 && num1 ==13){
System.out.println("評価値は" + (num1-14) + "です");
int num4 = (num1-14);
}

else if(num1 >=10 && num1 <=14 && num1 ==14){
System.out.println("評価値は" + (num1-15) + "です");
int num4 = (num1-15);
}

else{
System.out.println("数値が正しくありません");
}

//自分のカードの数(1枚目) 2~6
if(num2 >=2 && num2 <= 6 && num2 ==2){
System.out.println("評価値は" + (num2-1) + "です");
int num5 = (num2-1);
}

else if(num2 >=2 && num2 <= 6 && num2 ==3){
System.out.println("評価値は" + (num2-2) + "です"); 
int num5 = (num2-2);
}

else if(num2 >=2 && num2 <= 6 && num2 ==4){
System.out.println("評価値は" + (num2-3) + "です"); 
int num5 = (num2-3);
}

else if(num2 >=2 && num2 <= 6 && num2 ==5){
System.out.println("評価値は" + (num2-4) + "です");
int num5 = (num2-4);
}

else if(num2 >=2 && num2 <= 6 && num2 ==6){
System.out.println("評価値は" + (num2-5) + "です");
int num5 = (num2-5); 
}

//自分のカードの数(1枚目) 7~9

else if(num2 >=7 && num2 <=9 && num2 ==7){
System.out.println("評価値は" + (num2-7) + "です");
int num5 = (num2-7);
}

else if(num2 >=7 && num2 <=9 && num2 ==8){
System.out.println("評価値は" + (num2-8) + "です");
int num5 = (num2-8);
}

else if(num2 >=7 && num2 <=9 && num2 ==9){
System.out.println("評価値は" + (num2-9) + "です");
int num5 = (num2-9);
}

//自分のカードの数(1枚目) 10~14
else if(num2 >=10 && num2 <=14 && num2 ==10){
System.out.println("評価値は" + (num2-11) + "です");
int num5 = (num2-11);
}

else if(num2 >=10 && num2 <=14 && num2 ==11){
System.out.println("評価値は" + (num2-12) + "です");
int num5 = (num2-12);
}

else if(num2 >=10 && num2 <=14 && num2 ==12){
System.out.println("評価値は" + (num2-13) + "です");
int num5 = (num2-13);
}

else if(num2 >=10 && num2 <=14 && num2 ==13){
System.out.println("評価値は" + (num2-14) + "です");
int num5 = (num2-14);
}

else if(num2 >=10 && num2 <=14 && num2 ==14){
System.out.println("評価値は" + (num2-15) + "です");
int num5 = (num2-15);
}

else{
System.out.println("数値が正しくありません");
}

//自分のカードの数(2枚目) 2~6
if(num3 >=2 && num3 <= 6 && num3 ==2){
System.out.println("評価値は" + (num3-1) + "です");
int num6 = (num3-1);
}

else if(num3 >=2 && num3 <= 6 && num3 ==3){
System.out.println("評価値は" + (num3-2) + "です"); 
int num6 = (num3-2);
}

else if(num3 >=2 && num3 <= 6 && num3 ==4){
System.out.println("評価値は" + (num3-3) + "です");
int num6 = (num3-3); 
}

else if(num3 >=2 && num3 <= 6 && num3 ==5){
System.out.println("評価値は" + (num3-4) + "です"); 
int num6 = (num3-4);
}

else if(num3 >=2 && num3 <= 6 && num3 ==6){
System.out.println("評価値は" + (num3-5) + "です");
int num6 = (num3-5);
}

//自分のカードの数(2枚目) 7~9

else if(num3 >=7 && num3 <=9 && num3 ==7){
System.out.println("評価値は" + (num3-7) + "です");
int num6 = (num3-7);
}

else if(num3 >=7 && num3 <=9 && num3 ==8){
System.out.println("評価値は" + (num3-8) + "です");
int num6 = (num3-8);
}

else if(num3 >=7 && num3 <=9 && num3 ==9){
System.out.println("評価値は" + (num3-9) + "です");
int num6 = (num3-9);
}

//自分のカードの数(2枚目) 10~14
else if(num3 >=10 && num3 <=14 && num3 ==10){
System.out.println("評価値は" + (num3-11) + "です");
int num6 = (num3-11);
}

else if(num3 >=10 && num3 <=14 && num3 ==11){
System.out.println("評価値は" + (num3-12) + "です");
int num6 = (num3-12);
}

else if(num3 >=10 && num3 <=14 && num3 ==12){
System.out.println("評価値は" + (num3-13) + "です");
int num6 = (num3-13);
}

else if(num3 >=10 && num3 <=14 && num3 ==13){
System.out.println("評価値は" + (num3-14) + "です");
int num6 = (num3-14);
}

else if(num3 >=10 && num3 <=14 && num3 ==14){
System.out.println("評価値は" + (num3-15) + "です");
int num6 = (num3-15);
}

else{
System.out.println("数値が正しくありません");
}

System.out.println("評価値の合計は" +(num4+num5+num6)+ "です。");
}
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • swordone

    2019/09/18 23:35

    変数のスコープについて調べて出直してください。

    キャンセル

  • rindou0088

    2019/09/18 23:38

    アドバイスありがとうございます。
    調べてみます。

    キャンセル

  • jimbe

    2019/09/19 12:35

    > if(num1 >=2 && num1 <= 6 && num1 ==2){
    このような if 文が並んでいますが, 『「num1 >=2」かつ「num1 <= 6」かつ「num1 ==2」』ということは, 結局最後の「num1 ==2」だけで良いことにお気付きになられますでしょうか.

    また
    > System.out.println("評価値は" + (num1-1) + "です");
    > int num4 = (num1-1);
    と表示と代入でそれぞれ「(num1-1)」を計算されていますが, 表示と代入の順を逆にすれば
    num4 = (num1-1);
    System.out.println("評価値は" + num4 + "です");
    と計算は一度で済みます.

    さらには, if 文の条件に合わせますと, 「num1 == 2」の時に「num4 = (num1-1)」ですので計算する必要は無く, 「num4 = 1」だけで済みます.

    ここまではコードレベルの修正ですが, そもそも仕様が「2~6の数字は評価値1」ですので, 「num1 == 2」「num1 == 3」…と if 文が並ぶ必要も無く
    if(num1 >=2 && num1 <= 6){
    num4 = 1;
    System.out.println("評価値は" + num4 + "です");
    }
    で 1~6 の評価がまとめて出来ます.

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る