0

モードrandomundefinedのときに、再帰的な Switch ステートメントの値を取得しています。アイデアは、最もランダムなIDであり、ランダムに番号を選択して新しいモードを設定し、元のswitchステートメントを返すというものです。

モードがランダムでない場合、すべてが正常に機能します。したがって、ここで何が問題なのかわかりません。
variableaはモードで、i,jは単なる数値です。

switchMode: function (i, j, a){
            var b;
            console.log(a);
            switch(a) {
                default:
                case 'add':
                    console.log(i, j);
                    b = i + j;
                    break;

                case 'minus':
                    console.log(i, j);
                    b = i - j; //negative numbers possible
                    break;

                case 'multiply':
                    console.log(i, j);
                    b = i * j; //0 possible
                    break;  

                case 'random':
                    this.randomSwitchMode(i, j);
                    break; //random
            }   
            return b;
        },



randomSwitchMode: function(i, j) {
            var c = Math.ceil(Math.random() * 3);

            console.log(i, j, c);

            switch(c) {
                default:
                case 1: 
                    var a = 'add';
                    console.log(a);
                    this.switchMode(i, j, a);
                    break;

                case 2: 
                    var a = 'minus';
                    console.log(a);
                    this.switchMode(i, j, a);
                    break;

                case 3:
                    var a = 'multiply';
                    console.log(a);
                    this.switchMode(i, j, a);
                    break; 
            } 
        }
4

1 に答える 1

3

「randomSwitchMode」から何も返していません。その場合でも、その戻り値を「switchMode」の「b」に割り当てることも確認する必要があります。

したがって、ランダムなケースは次のようになります。

            case 1: 
                var a = 'add';
                console.log(a);
                return this.switchMode(i, j, a);

そして「switchMode」で:

            case 'random':
                b = this.randomSwitchMode(i, j);
                break; //random

いずれにせよ、このすべての問題が発生するため、ステートメントを使用する代わりに、switch操作名を関数にマップするオブジェクトを保持することをお勧めします。

switchMode: function (i, j, a) {
  var ops = {
    'add': function(i, j) { return i + j; },
    'minus': function(i, j) { return i - j; },
    'multiply': function(i, j) { return i * j; },
    'random': function(i, j) {
      return ops[['add', 'minus', 'multiply'][Math.floor(Math.random() * 3)]](i, j);
    }
  };
  return ops[a](i, j);
}

「ランダムな」ケースを分割して、別の方法で処理できると思います。全体的なポイントは、switchステートメントに本質的に問題はありませんが、データ構造に基づいて実装する方がより柔軟になるということです。

于 2012-08-27T12:40:57.327 に答える