Есть ли способ выбрать массив без его указания

Я хочу получить число из массива без необходимости делать много операторов if.

double[] PVC_A1_Cu = new double[]{14.5d, 19.5d, 26.0d, 34.0d, 46.0d, 61.0d, 80.0d, 99.0d, 119.0d, 151.0d, 182.0d, 210.0d, 240.0d, 273.0d, 321.0d, 367.0d};
double[] PVC_A2_Cu = new double[]{14.0d, 18.5d, 25.0d, 32.0d, 43.0d, 57.0d, 75.0d, 92.0d, 110.0d, 139.0d, 167.0d, 192.0d, 219.0d, 148.0d, 291.0d, 334.0d};
double[] PVC_B1_Cu = new double[]{17.5d, 24.0d, 32.0d, 41.0d, 57.0d, 76.0d, 101.0d, 125.0d, 151.0d, 192.0d, 232.0d, 269.0d, 300.0d, 341.0d, 400.0d, 458.0d};
double[] PVC_B2_Cu = new double[]{16.5d, 23.0d, 30.0d, 38.0d, 52.0d, 69.0d, 90.0d, 111.0d, 133.0d, 168.0d, 201.0d, 232.0d, 258.0d, 294.0d, 344.0d, 394.0d};

String Kappe = SpinLederKapp.getSelectedItem().toString();   // This would return "PVC"
String LederMat = SpinLederMat.getSelectedItem().toString(); // This would return "A1"
String InsMet = SpinInsMet.getSelectedItem().toString();     //This would return  "Cu"

Integer Tverrsnitt = SpinTverrsnitt.getSelectedItemPosition();  //This would return in this case   "2"

String Codetest = Kappe + "_" + InsMet + "_"+LederMat;  //this would put it together like "PVC_A1_Cu"

Double Test3 = Codetest[Tverrsnitt];  //And here is were my knowledge ends...
//This does not work ^

//What i want it to do:
Double Test1 = PVC_A1_Cu[2];

Обращаясь за помощью, лучше всего придерживаться стандартных соглашений об именах, так как людям будет намного легче читать ваш код и помогать вам. (Это хорошая идея, когда нет тоже просит о помощи.) Имена переменных начинаются с нижнего регистра, например, kappe вместо Kappe.

T.J. Crowder 28.05.2019 19:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поместите массивы в Map (возможно, один раз, а затем сохраните его на уровне класса):

Map<String, double[]> map = new HashMap<>();
map.put("PVC_A1_Cu", new double[]{14.5d, 19.5d, 26.0d, 34.0d, 46.0d, 61.0d, 80.0d, 99.0d, 119.0d, 151.0d, 182.0d, 210.0d, 240.0d, 273.0d, 321.0d, 367.0d});
map.put("PVC_A2_Cu", new double[]{14.0d, 18.5d, 25.0d, 32.0d, 43.0d, 57.0d, 75.0d, 92.0d, 110.0d, 139.0d, 167.0d, 192.0d, 219.0d, 148.0d, 291.0d, 334.0d});
map.put("PVC_B1_Cu", new double[]{17.5d, 24.0d, 32.0d, 41.0d, 57.0d, 76.0d, 101.0d, 125.0d, 151.0d, 192.0d, 232.0d, 269.0d, 300.0d, 341.0d, 400.0d, 458.0d});
map.put("PVC_B2_Cu", new double[]{16.5d, 23.0d, 30.0d, 38.0d, 52.0d, 69.0d, 90.0d, 111.0d, 133.0d, 168.0d, 201.0d, 232.0d, 258.0d, 294.0d, 344.0d, 394.0d});

а затем используйте его со своей строкой Codetest:

double Test3 = map.get(Codetest)[Tverrsnitt];

Обратите внимание, что я использовал double, а не Double, поскольку массивы состоят из примитивных двойников, а не экземпляров Double.

Это поможет вам понять, что здесь происходит не так.

Сначала вы создаете двойной массив,

double[] PVC_A1_Cu = ..... //This means create a variable of type double array whose name is PVC_A1_Cu.

Позже вы создаете строковую переменную,

String Codetest = ... //This means create a variable of type String whose name is codetest

Наконец, вы присваиваете значение "PVC_A1_Cu" (которое является именем вашей переменной двойного массива) вашей строковой переменной Codetest. Это никоим образом не означает, что вы имеете в виду содержимое двойного массива, это просто означает, что ваша строковая переменная имеет содержимое «PVC_A1_Cu» и не может упоминаться как массив. Поэтому компилятор будет жаловаться, когда ваш код сделает это,

Codetest[Tverrsnitt]; //codeTest is not an array

Самый простой способ справиться с этим:

if ("PVC_A1_Cu".equals(Codetest)) {
    test3 = PVC_A1_Cu[Tverrsnitt];
} else ("PVC_A2_Cu".equals(Codetest)) {
    test3 = PVC_A2_Cu[Tverrsnitt];
} else ("PVC_B1_Cu".equals(Codetest)) {
    test3 = PVC_B1_Cu[Tverrsnitt];
} else {
    test3 = PVC_B2_Cu[Tverrsnitt];
}

Другие вопросы по теме