иметь ссылку на объект в массиве - PullRequest
0 голосов
/ 26 февраля 2011

Возможно ли иметь символ, указывающий на объект в массиве? я пытаюсь, чтобы символы: +, -, *, / указывали на индекс в моем массиве.

Я ХОРОШО ЗНАЮ, МОЙ РАЗДЕЛ НИЖЕ НЕ ПРАВИЛ это просто мой способ описания того, чего я хочу достичь.

 public static void main(String[] args) {

            Operations plus;
            Operations minus;
            Operations multiply;
            Operations divide;
    /**********Create jumpTable*******************/
            Operations[] jumpTable = new Operations[255];
    /**********Add Object to jumpTable************/
            jumpTable[0] = new Addition();
            jumpTable[1] = new Subtraction();
            jumpTable[2] = new Multiplication();
            jumpTable[3] = new Division();
    /**********Point to index in table************/
            plus = jumpTable[0];
            minus = jumpTable[1];
            multiply = jumpTable[2];
            divide = jumpTable[3];

    //this is what im trying to do:
    //***************************************
     char +;
     char -;
     '+' = plus
     '-' = minus and etc...
   //****************************************
           double x = Double.parseDouble(args[0]);
           double y = Double.parseDouble(args[1]);


        System.out.printf("%f %s %f = %f%n", x, op, y, op.Compute(x, y));

        }
    }

Ответы [ 5 ]

2 голосов
/ 26 февраля 2011

Возможно ли иметь символ, указывающий на объект в массиве?

Предполагая, что вы спрашиваете: "Возможно ли использовать char в качестве индекса длямассив ", тогда ответ" Да, это возможно ".

Выражение индекса для массива может иметь любой тип , который может быть повышен до int;см. JLS 15.13 .И тип char может быть повышен до int.(Вам даже не нужно включать Typecast, чтобы это произошло. Это просто работает.)

1 голос
/ 26 февраля 2011

Не могли бы вы использовать Map<String, Operations> вместо Operations[]?

Также операции, вероятно, следует называть операцией.

0 голосов
/ 26 февраля 2011

Вы можете использовать значение типа char каждый раз, когда допустимо значение типа int, и (кроме конкатенации строк и двух методов обоих типов) оно работает так же, как int, полученный с помощью

Таким образом, operators['+'] идентичен operators[43] и аналогичен.

Если вам нужны только *, +, -, /, выможно использовать массив длины 6 и индексировать его, взяв разницу до * (который является первым из них):

Operations[] jumptable = {
   new Multiplication(),  // * = 42 = '*' + 0
   new Addition(),        // + = 43 = '*' + 1
   null,                  // , = 44 
   new Subtraction(),     // - = 45 = '*' + 3
   null,                  // . = 46
   new Division()         // / = 47 = '*' + 5
};

char operator = ...;

Operation op = jumptable[operator - '*'];

Конечно, вы всегда можете сделать таблицу настолько большой, насколько это необходимои непосредственно индексировать.

0 голосов
/ 26 февраля 2011

вы можете привести символ к целому или байту

char addition = '+';
operators[(byte)addition] = ...
0 голосов
/ 26 февраля 2011

Нет.

Char - это примитивный тип Java, представляющий один 16-разрядный символ Unicode.

См. Здесь:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

...