2010-04-04 19 views
22

Tengo una matriz de Java ya definida, p.Asignación de matriz de Java (valores múltiples)

float[] values = new float[3]; 

me gustaría hacer algo como esto más adelante en el código:

values = {0.1f, 0.2f, 0.3f}; 

Pero eso me da un error de compilación. ¿Hay alguna manera más agradable de definir valores múltiples a la vez, en lugar de hacer esto ?:

values[0] = 0.1f; 
values[1] = 0.2f; 
values[2] = 0.3f; 

¡Gracias!

Respuesta

55

Sí:

float[] values = {0.1f, 0.2f, 0.3f}; 

Esta sintaxis es la única permisible en un inicializador. No se puede utilizar en una misión, en el que el siguiente es el mejor que puede hacer:

values = new float[3]; 

o

values = new float[] {0.1f, 0.2f, 0.3f}; 

Tratando de encontrar una referencia en la especificación de lenguaje para esto, pero es tan indescifrable nunca. ¿Alguien más encuentra uno?

+0

Creo que esto podría ser eso, 10.6 matriz Inicializadores, http: // java .sun.com/docs/books/jls/third_edition/html/arrays.html # 11358 – Adrian

+2

Esta parece ser la parte relevante de la gramática: http://java.sun.com/docs/books/jls/third_edition/ html/arrays.html # 11358 - Personalmente, siempre he encontrado que la especificación del lenguaje Java es muy legible, en comparación con documentos similares. –

+8

Es posible que desee tener en cuenta que el código inferior crea una nueva matriz. –

2
values = new float[] { 0.1f, 0.2f, 0.3f }; 
8

En la declaración, puede hacer lo siguiente.

float[] values = {0.1f, 0.2f, 0.3f}; 

Cuando el campo ya está definido, intente esto.

values = new float[] {0.1f, 0.2f, 0.3f}; 

Tenga en cuenta que también la segunda versión crea una nueva matriz. Si values fue la única referencia a un campo ya existente, se vuelve elegible para la recolección de basura.

1

Si conoce los valores en tiempo de compilación que puede hacer:

float[] values = {0.1f, 0.2f, 0.3f}; 

No hay manera de hacerlo si los valores son variables en tiempo de ejecución.

3

Java no proporciona una construcción que va a asignar de múltiples valores a los elementos de una matriz existente. Las sintaxis del inicializador SÓLO se pueden usar cuando se crea un nuevo objeto de matriz. Esto puede ser en el momento de la declaración o más adelante. Pero de cualquier manera, el inicializador está inicializando un nuevo objeto de matriz, no actualizando uno existente.

0

esto debería funcionar, pero es más lento y se siente mal: System.arraycopy(new float[]{...}, 0, values, 0, 3);

0

usted puede utilizar una variable local, como:

float[] values = new float[3]; 
    float[] v = {0.1f, 0.2f, 0.3f}; 
    float[] values = v; 
0
public class arrayFloats { 
     public static void main (String [] args){ 
     float [] Values = new float[3]; 
     float Incre = 0.1f; 
     int Count = 0; 

     for (Count = 0;Count<3 ;Count++) { 
      Values [Count] = Incre + 0.0f; 
      Incre += 0.1f; 
      System.out.println("Values [" + Count + "] : " + Values [Count]); 
     } 


     } 
    } 

//OUTPUT: 
//Values [0] : 0.1 
//Values [1] : 0.2 
//Values [2] : 0.3 

Este no es el todo y ser todo de asignar valores a una matriz específica. Como he visto que la muestra era 0.1 - 0.3, podrías hacerlo de esta manera. Este método es muy útil si está diseñando cuadros y gráficos. Puede hacer que el valor x se incremente en 0.1 hasta la enésima vez.

O si desea diseñar alguna grilla de algún tipo.

+0

agregar un texto descriptivo puede ayudar a otros a entender su respuesta –

-1
int a[] = { 2, 6, 8, 5, 4, 3 }; 
int b[] = { 2, 3, 4, 7 }; 

si se toma el número de flotación luego de tomar flotador y es su elección

esto es muy buena manera de mostrar elementos de la matriz.

0

por ejemplo Traté todos por encima de los caracteres que falla pero que funcionó para mí >> reservado un puntero a continuación, asignar valores

char A[]; 
A = new char[]{'a', 'b', 'a', 'c', 'd', 'd', 'e', 'f', 'q', 'r'}; 
Cuestiones relacionadas