#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
. Вы мало что можете сделать с anObject
, если не знаете, какой это тип на самом деле, и не отбрасываете его.
Ответ №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);
}