elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  dudas con arreglos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: dudas con arreglos  (Leído 1,439 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
dudas con arreglos
« en: 17 Febrero 2015, 03:50 am »

Saludos

Tengo una duda sobre el manejo de arreglos

Yo tengo una clase en la que tengo declarado como atributo una variable global array de tipo byte[] de tamaño 50. y en esa clase también tengo un metodo que se llama send() y al cual desde el main con un ciclo le voy a ir pasando arreglos de distintos tamaños y se los voy a tener que concatenar a ese arreglo global, byte[]. con cada llamada a send().

Código
  1. class Nucleo{
  2. static byte[] buffer = new byte[50];
  3. public void send(byte[] mensaje){
  4. for(int i = 0;i < mensaje.length;i++)
  5. {
  6.    buffer[i] = mensaje[i];
  7. }
  8. }
  9. }
  10. }

en este codigo le paso un mensaje que es un array de bytes y se lo concateno a buffer. Pero el problema es que el codigo solo funcionaría la primera vez que llamo a send(), y las demas veces ya no lo podria concatenar. ¿cómo podría resolver esto?

de antemano gracias


En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: dudas con arreglos
« Respuesta #1 en: 17 Febrero 2015, 06:11 am »

Eso es porque siempre comienzas en la posición 0 del arreglo, es decir que para que los datos se guardaran al final de tu arreglo deberías declarar la variable i como una variable global, en el for inicializar i a su propio valor en vez del 0.

Código
  1. class Nucleo{
  2. static byte[] buffer = new byte[50];
  3.        int i;
  4. public void send(byte[] mensaje){
  5.                int i_inicial = i;
  6. for(i = i;i < i_inicial + mensaje.length;i++)
  7. {
  8.    buffer[i] = mensaje[i];
  9. }
  10. }
  11. }
  12. }

Pero te recomiendo que para eso utilices los métodos de la clase Array, Copy(), etc.


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: dudas con arreglos
« Respuesta #2 en: 17 Febrero 2015, 08:02 am »

Ay dios mio, me van a matar.

Esto ya lo dije en un tema, las variables GLOBALES no existe en Java. Eso es una variable de CLASE.

Dejando eso claro, intentare responder tu pregunta.

Como dice @El Benjo Lo que pasa es que empiezas desde el indice 0 siempre, por lo cual siempre re-definirás los primeros datos ingresados.

Por otro lado siempre que tengas un arreglo en el cual necesites modificar su longitud es mejor trabajar con listas. (En la actualidad tu programa explotaría si yo hago paso como parámetro un array de 51 elementos).

Si te rehúsas a utilizar listas o cualquier cosa por alguna razón, podrías complicarte la vida haciendo algo como esto:

    
Código
  1. public static byte[] buffer;
  2.  
  3.    public void send(byte[] mensaje) {
  4.        if (Nucleo.buffer == null) {
  5.            Nucleo.buffer = mensaje;
  6.        } else {
  7.            byte[] newBuffer = new byte[Nucleo.buffer.length+mensaje.length];
  8.            for (int i = 0; i < newBuffer.length; i++) {
  9.                if (i < Nucleo.buffer.length) {
  10.                    newBuffer[i] = Nucleo.buffer[i];
  11.                } else {
  12.                    newBuffer[i] = mensaje[i-Nucleo.buffer.length];
  13.                }
  14.            }
  15.            Nucleo.buffer = newBuffer;
  16.        }
  17.    }

Ahora te doy mis recomendaciones que doy a todos. (Lamento ser un pesado)

1. No utilices variables de clase amenos que sea totalmente necesario. (Existen casos en que lo es, por ejemplo en el patrón de diseño Singleton) - Para saber mas de patrones de diseño haz clic aquí.

2. No hagas clases, métodos o variables friendly (encapsulamiento default), es una mala practica, la encapsulación no debe depender de la arquitectura o distribución de tu proyecto.

Código
  1. public class Nucleo {
  2.    public static byte[] buffer;
  3. }

3. Cuando abras llaves "{" ponlo en la misma linea que la sentencia separados por un espacio del paréntesis (). Por ejemplo:

Código
  1. public void myMethod() {
  2.  
  3. }

4. En sentencias if, for, while.... (sentencias, no métodos, que reciban parámetros) separa los paréntesis de la sentencia.

Código
  1. if (condition) {
  2.  
  3. }

Esto que te mencione de las 3 y 4 no harán que tu programa sea mejor, pero si hará que tu código lo sea. Es como la ortografía, se entiende, pero los ojos sangran.

Para saber mas de las buenas practicas y convenciones de Java haz clic aquí

(Podría darte un par de consejos mas como que cuides mas tu indentado, pero ya es suficiente)

PD: Por favor, dejen de referirse a las variables "estaticas" como variables globales, los novatos se confunden.

PD2: Felicitaciones @m@o_614 tomaste mi consejo de volver a lo básico, sigue así y tu lógica mejorara muchísimo.  ;-) ;-) ;-)
« Última modificación: 17 Febrero 2015, 08:04 am por Nac-ho » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
con arreglos
Java
artang 0 2,150 Último mensaje 31 Marzo 2009, 04:54 am
por artang
arreglos en c
Programación C/C++
el futuro 5 3,221 Último mensaje 21 Mayo 2010, 02:08 am
por @synthesize
Arreglos
Programación C/C++
angel_davidsr 3 2,200 Último mensaje 17 Octubre 2012, 19:46 pm
por Puntoinfinito
Arreglos c++
Programación C/C++
alfonsopf95 2 1,909 Último mensaje 7 Abril 2014, 15:22 pm
por rir3760
arreglos en c
Programación C/C++
arodriguez98 5 2,307 Último mensaje 4 Diciembre 2014, 23:20 pm
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines