Я хочу получить число из массива без необходимости делать много операторов 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];
Поместите массивы в 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];
}
Обращаясь за помощью, лучше всего придерживаться стандартных соглашений об именах, так как людям будет намного легче читать ваш код и помогать вам. (Это хорошая идея, когда нет тоже просит о помощи.) Имена переменных начинаются с нижнего регистра, например,
kappe
вместоKappe
.