2014-11-14 3 views
0

В настоящее время я использую это:Как оптимизировать объявление многих переменных? [Java]

  d_y1 = Double.parseDouble(s_y1); 
      d_y2 = Double.parseDouble(s_y2); 
      d_y3 = Double.parseDouble(s_y3); 
      d_y4 = Double.parseDouble(s_y4); 
      d_y5 = Double.parseDouble(s_y5); 
      d_y6 = Double.parseDouble(s_y6); 
      d_x1 = Double.parseDouble(s_x1); 
      d_x2 = Double.parseDouble(s_x2); 
      d_x3 = Double.parseDouble(s_x3); 
      d_x4 = Double.parseDouble(s_x4); 
      d_x5 = Double.parseDouble(s_x5); 
      d_x6 = Double.parseDouble(s_x6); 

И я подумал о чем-то вроде этого, но это не будет работать: Любые советы?

String[] s_Werte = {s_x1, s_x2, s_x3, s_x4, s_x5, s_x6,s_y1, s_y2, s_y3, s_y4, s_y5, s_y6}; 
double[] d_Werte = {d_x1, d_x2, d_x3, d_x4, d_x5, d_x6,d_y1, d_y2, d_y3, d_y4, d_y5, d_y6}; 

for (i = 0; i < d_Werte.length; i++){ 
       d_Werte[i] = Double.parseDouble(s_Werte[i]); 
      } 
+0

Что не так с тем, что у вас есть? Вам не нравится это, потому что он занимает несколько _lines_ кода? – munyul

+0

Что означает «но это не работает»? Какая у вас проблема? И каково ваше ожидание, которое не выполнено? – Seelenvirtuose

+0

Если вы измените свою строку на 'double [] d_Werte = new double [s_Werte.length];' она должна по крайней мере сделать то же самое, что и ваш исходный код –

ответ

-1

Если вы хотите использовать массив, то вы не можете инициализировать его с помощью переменных, это не будет работать:

double[] d_Werte = {d_x1, d_x2, d_x3, d_x4, d_x5, d_x6,d_y1, d_y2, d_y3, d_y4, d_y5, d_y6}; 

Но и вам нужно получить переменную типа String в формате, который вы можете цикл в как :

String[] strings; 

Вы должны сначала инициализировать его размер (и выделить необходимое пространство):

double[] d_Werte = new double[12]; 

или использовать 2 массив 6 длины, а затем присвоить каждое значение для конкретного индекса:

for(int i = 0; i < 12; i++) 
d_Werte[i] = Double.parseDouble(strings[i]); 
-3

Вот сумасшедшего решения, я бы не использовать это, но это показывает, что (с обходным путем), что вы пытались это работа:

import java.util.Arrays; 
import java.util.List; 

public class ValueArrays 
{ 
    public static class MyDouble 
    { 
     public Double value = 0d; 
    } 

    public static void main(String[] args) 
    { 

     MyDouble d1 = new MyDouble(); 
     MyDouble d2 = new MyDouble(); 
     MyDouble d3 = new MyDouble(); 
     MyDouble dn = new MyDouble(); 
     String s1 = "3"; 
     String s2 = "2"; 
     String s3 = "1"; 

     // s_Values and d_Values MUST be of the same length, 
     // whether you use variable or static String's here doesn't matter 
     String[] s_Values = { s1, s2, s3, "9.9" }; 
     List<MyDouble> d_Values = Arrays.asList(d1, d2, d3, dn); 

     for (int i = 0; i < d_Values.size(); i++) 
     { // This will now initialise all the "local" variables 
      d_Values.get(i).value = Double.valueOf(s_Values[i]); 
     } 

     // As you'll see from the output, all local values have now been correctly "initialised". 
     System.out.println("d1 = " + d1.value); 
     System.out.println("d2 = " + d2.value); 
     System.out.println("d3 = " + d3.value); 
     System.out.println("dn = " + dn.value); 
    } 
} 

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

+0

Ничто в сообщении не предполагает, что ему нужно использовать одни и те же точные переменные, ему просто нужен более аккуратный способ сделать это, не записывая слишком много строк. – elmorabea

+0

@MahmoudElmorabea, снова прочитайте вопрос и внимательно посмотрите на его код ... он РАБОТАЕТ, почему он утверждает, что нет, если он не пытался использовать исходные локальные переменные, это цикл 'for'? – munyul

-1

У вас может быть 2 ArrayLists, один содержит ваши строки, а другой может быть заполнен их двойными значениями.

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

List<String> strings ... 
List<Double> doubles ... 

for (String s : strings) { 
    doubles.add(Double.parseDouble(s)); 
} 

Таким образом, это динамика в популяции и размера

+0

Это не решит исходную проблему. После «parseDouble» следует использовать первоначально определенные локальные переменные.Это не похоже на «Double», поэтому я предложил создать класс-оболочку, который работает. – munyul

+0

«Первоначально определенные локальные переменные», вы имеете в виду одну и ту же переменную? то, что вы предлагаете, это иметь список ссылок на примитивный тип, который java не делает // Какая разница, если он будет использовать первоначально определенную переменную или другую, которая имеет такое же значение, поскольку они являются примитивами? – elmorabea

+0

Я не задавал оригинальный вопрос. Однако, если вы читаете исходный вопрос, пользователь хотел _simplify_ код в цикл, чтобы инициализировать локальные переменные, а не заменять их. Кажется, это был вопрос о том, как сделать код _look_ _pretty_, что всегда является вопросом личного вкуса для каждого отдельного программиста. – munyul

Смежные вопросы