чередование поплавков и строк в java

#java

#java

Вопрос:

Мне нужно чередовать 2 массива чисел с плавающей запятой, чисел с плавающей запятой, строк и помещать их в список.

 float[] array1;
float[] array2;
float value1;
float value2;
string name1;
string name2;
 

на выходе что-то вроде:

 {array1[i], array2[i], "name1", value1, value2, "name2",  value1, value....}
 

возможно ли это в Java?

хорошо, я пытаюсь это сделать, но это не сработает:

 static Object[] dumoToCurve(final float[] x, final float[] y)   {
    final Object[] output = new Object[x.length * 2];
    float value= 1;

    for (int i=0; i < x.length; i  ){

        output[i << 1] = x[i];
        output[(i << 1)   1] = y[i];
        output[(i << 1)   2] = "b0";
        output[(i << 1)   3] = x[i] value;
        output[(i << 1)   4] = y[i] value;
        output[(i << 1)   5] = "b1";
    }

    return output;
}
 

нужно ли мне выполнять приведение? как?

Комментарии:

1. Да, если вы создаете массив типа Object[] . Но как вы планируете получить доступ к элементам позже?

2. спасибо, после создания массива мне не нужно его изменять.

3. Речь идет не о его изменении. Но скорее как вы планируете это читать? Информация о типе теряется при повышении — если только вы не знаете, к какому типу относится каждый элемент, и не будете понижать его соответствующим образом.

4. о, я понимаю. Значит, мы не можем читать через массив, как обычно?

5. Вы можете извлечь его из массива, но он будет иметь тип Object . Вы мало что можете сделать с an Object , если не знаете, какой это тип на самом деле, и не отбрасываете его.

Ответ №1:

Вот ответ на ваше редактирование. У меня нет компилятора Java передо мной, чтобы протестировать его. Так что я не совсем уверен, сработает ли это. Кроме того, я думаю, что некоторые из них можно упростить с помощью автоматической (un) упаковки.

 for (int i=0; i < x.length; i  ){

    output[ i << 1     ] = new Float(x[i]);
    output[(i << 1)   1] = new Float(y[i]);
    output[(i << 1)   2] = "b0";
    output[(i << 1)   3] = new Float(x[i]   value);
    output[(i << 1)   4] = new Float(y[i]   value);
    output[(i << 1)   5] = "b1";
}
 

Чтобы извлечь float значение из массива:

 float val = ((Float)output[0]).floatValue();
 

Если приведение завершится неудачно, это выдаст вам исключение.

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

Комментарии:

1. классное спасибо! Я получаю исключение в выводе этих строк [(i << 1) 3] = (( Float)x[i]). Значение floatValue() значение; и вывод[(i << 1) 4] = (( Float)y[i]). Значение floatValue() значение;

2. это выглядит хорошо, спасибо Mysticial. Что вы предлагаете для улучшения дизайна?

3. Вероятно, вам следует создать два массива. Один для строк и один для чисел с плавающей запятой. Попытка смешать их в один и тот же массив приведет к этой путанице с приведением, упаковкой / распаковкой и т. Д…

4. Очевидно, это будет зависеть от того, как вы собираетесь использовать этот конечный (смешанный) массив. Я полагаю, если вы просто собираетесь вызвать .toString() все, чтобы распечатать это, тогда все в порядке. Но если вы собираетесь считывать значения с плавающей запятой обратно и выполнять с ними арифметику, то вы столкнетесь с проблемой приведения и распаковки.

5. кстати, глядя на ваши прошлые вопросы, вы, вероятно, не понимали, что можете «принять» ответ, нажав на галочку рядом с ответом. Вероятно, вам следует сделать это со всеми вашими вопросами, на которые, по вашему мнению, были даны ответы.

Ответ №2:

Я понятия не имею, что представляет ваша структура данных, но было бы лучше смоделировать ее как класс? Например:

 // completely made up class
class Player {
  ...
  private float[] latitudeHistory;
  private float[] longitudeHistory;
  private float currentLatitude;
  private float currentLongitude;
  private String playerName;
}
 

Комментарии:

1. У меня есть два массива с плавающей запятой, которые представляют положение X и Y кривой, затем мне нужна строка («b0»), другая точка X и Y, затем снова строка («b1») и x y. эта структура имеет динамическую длину. Итак, в конце что-то вроде: {X [i], Y [i], «b0», X [i]-значение, X [i]-значение, «b1», X [i] значение, X [i] значение … } значение — это число с плавающей запятой

Ответ №3:

Да, это так, просто поместите это в массив объекта

 Object[] myObjects = new Object[] {array1[i], array2[i], "name1", value1, value2, "name2",  value1, value....};
 

Ответ №4:

Ага.

Вот пример

    int i = 4;
   long j = 323232333;
   String k = "dadasdad";
   char c = 'a';
   Object [] x = {c,i,j,k};

    for( Object z : x){
            System.out.println(z);
    }