2

switchステートメントからintcを初期化する方法を考えていました。ランダムスイッチ引数を最終的な答えに「抽出」する方法がわかりません。私は初心者なので、ここで明らかな何かが欠けているのかもしれません。これが私がこれまでに持っているコードです:

import java.util.*;
public class whileTest{
public static void main (String args[]){
    Scanner sc = new Scanner(System.in);

    String a;

        do{

        String operatorSwitch;
        int b;
        int c;

        Random number = new Random();
        int d = number.nextInt(100) +1;
        int e = number.nextInt(100) +1;

        Random operatorChoice = new Random();
        int operator = operatorChoice.nextInt(4);

        switch (operator){

            case 0: operatorSwitch= "+";
                c = d+e;
                break;
            case 1: operatorSwitch= "-";
                c = d-e;
                break;
            case 2: operatorSwitch= "*";
                c = d*e;
                break;
            case 3: operatorSwitch= "/";
                c = d/e;
                break;
            default: operatorSwitch= "";
        }
        System.out.println("What is: "+d+operatorSwitch+e+"?");
        b = sc.nextInt();


        if(b!=c)
            System.out.println("Wrong answer! Right answer is: "+c);
        else{if(b==c)
            System.out.println("Right answer!"+c);
        }
            System.out.println("Continue? y/n");
            a = sc.next();

        }while(a.equals("y"));
    }
}
4

2 に答える 2

3

練習として、特に理由がない限り、変数を常に明示的に初期化する必要があります。この場合、これを変更します。

String operatorSwitch;
int b;
int c;

これに:

String operatorSwitch = null;
int b = 0;
int c = 0;

現在のコードの問題は、変数「c」が初期化されていない可能性があるため、コンパイルの問題です。

于 2013-01-18T20:32:54.177 に答える
1

これをどれだけきれいにしたいかはわかりませんが、無名サブクラスを使用して Operator インターフェースを作成し、それらからランダムなインデックスを選択することができます。

interface Operator{
    public int operateOn( int a, int b );
    public char getDisplayChar();
}

Operator[] operators = {new Operator(){
        public int operateOn(int a, int b){
            return a + b;
        }

        public char getDisplayChar(){
            return '+';
        }
    }, new Operator(){
        public int operateOn(int a, int b){
            return a - b;
        }

        public char getDisplayChar(){
            return '-';
        }
    } // etc.
    };
于 2013-01-18T20:41:10.457 に答える