Comunidad de diseño web y desarrollo en internet online

problema matrix, añadiendo letras de un string..

Citar            
MensajeEscrito el 13 May 2010 03:08 pm
Hola:
Realmente el problema que tengo es simplemente de programación, asique este topic puede dar cabida en cualquier otro subforo (java, c..) pero lo pongo aquí que ya que estoy utilizando flex.
Hice hace tiempo mil ejercicios de matrices e historias varias, pero se conoce que no me debe funcionar la cabeza jeje


tengo un string: "holaquetal"
quiero añadirlo a una matriz, tal que se vaya escribiendo por columnas (algo así):

H A E L
O Q T
L U A

Código ActionScript :

var s2:String="holaquetal";
var columnas:Number=4;
var filas:Number=3;
for(var i:int=0; i<columnas; i++)
    for (var j:int=0; j<filas; j++)
         Matrix[i][j]=s2.charAt(j); //esto se que está mal porque siempre me escribiria "hol"pero nose como hacerlo..



como lo hariais?

Por yeayu

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2010 03:33 pm
Deberías usar otra variable, p.e. k que antes de los dos bucles valga 0 y que se incremente su valor en el segundo bucle.

Código ActionScript :

var s2:String="holaquetal"; 
var columnas:Number=4; 
var filas:Number=3; 
var k:int=0
for(var i:int=0; i<columnas; i++) 
    for (var j:int=0; j<filas; j++) {
         Matrix[i][j]=s2.charAt(k);
         k++
    }
}

Claro, que no te va a funcionar porque hay que declarar "Matrix" como array, y Matrix[i], también

Código ActionScript :

var s2:String="holaquetal"; 
var columnas:Number=4; 
var filas:Number=3; 
var k:int=0
var Matrix:Array=new Array()
for(var i:int=0; i<columnas; i++) 
    Matrix[i]=new Array()
    for (var j:int=0; j<filas; j++) {
         Matrix[i][j]=s2.charAt(k);
         k++
    }
}


También puedes usar un solo bucle y el operador módulo y la división

Código ActionScript :

var matrix:Array=new Array()
for (var k:int=0;k<s2.length;k++){
    var j:int=k/filas
    var i:int=k%filas
    if (matrix[i]==null){
          matrix[i]=new Array()
    }
    matrix[i][j]=s2.charAt(k)
}

Si lo quisieras distribuir en columnas, el bucle sería algo como

Código ActionScript :

var matrix:Array=new Array()
for (var k:int=0;k<s2.length;k++){
    var i:int=k/columnas
    var j:int=k%columnas
    if (matrix[i]==null){
          matrix[i]=new Array()
    }
    matrix[i][j]=s2.charAt(k)
}

NOTA:O elijes el número de filas o elijes el número de columnas

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2010 04:19 pm
perfecto, muy bien explicado..estoy retrasao ultimamente..jeje

como podria hacer para sacar esa matriz en un TextArea o en un PopUp? en plan:

H A E L
O Q T
L U A

me saldria con un trace(Matrix[][])??

Un saludo y gracias

Por yeayu

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2010 04:37 pm
Debes recorrerte el Array. Podrías, p.e. usar el método join de la Clase Array y escribir

Código ActionScript :

var texto:String=""
for (int i=0;i<matrix.length;i++){
   texto+=matrix[i].join(" ")+"\n"
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2010 05:54 pm

Eliseo2 escribió:

Debes recorrerte el Array. Podrías, p.e. usar el método join de la Clase Array y escribir

Código ActionScript :

var texto:String=""
for (int i=0;i<matrix.length;i++){
   texto+=matrix[i].join(" ")+"\n"
}


con esto lo recorro por columnas, pero lo que quiero es recorrerlo por filas es decir:

H A E L
O Q T
L U A

me lo convierta en : HAELOQTLUA

yo lo que estaba intentando era recorrerlo con dos for.

Por yeayu

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2010 06:06 pm
por que no me funciona esto??

Código ActionScript :

var texto:String="" 
for (int i=0;i<matrix.length;i++){ 
   for (int j=0; j<matrix[i].length; j++){
         texto+=matrix[j][i].join(" ");
   } 
} 

Por yeayu

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2010 07:42 pm
Quizá me esté complicando demasiado..

quiero que entre un string: "holaquetal"
esto convertirlo en esta forma para sacarlo por un TextArea o un PopUp
H A E L
O Q T
L U A

y despues devolver, leido por filas: HAELOQTLUA

estoy implementancion rail fence cipher, es un algoritmo de encriptacion que podeis ver aqui:http://www.simonsingh.net/The_Black_Chamber/railfence.html

Por yeayu

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 May 2010 06:29 am
Yeau, sí que lo estás liando. Por partes
1.-el método "join" sirve para, dado un array crear un string con todos los elementos del array separados por el/los carácter/es que sean. matrix[i][j] NO es un Array, es un string

2.-He hecho una prueba con lo que te dije

Código ActionScript :

var s2:String="holaquetal"; 
var filas:Number=3;

//Creo un array bidimensional
var matrix:Array=new Array()
for (var k:int=0;k<s2.length;k++){
    var j:int=k/filas
    var i:int=k%filas
    if (matrix[i]==null){
          matrix[i]=new Array()
    }
    matrix[i][j]=s2.charAt(k)
}
//Si quiero mostrar la matriz por filas
var texto:String="" 
for (i=0;i<matrix.length;i++){ 
   texto+=matrix[i].join(" ")+"\n" 
}      
//Si quiero mostrar TODOS los elementos de la matriz en una línea
var texto2:String="" 
for (i=0;i<matrix.length;i++){ 
   texto2+=matrix[i].join(" ")
}      

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 May 2010 10:54 am
si, me estaba complicando demasiado..
Gracias Eliseo

Por yeayu

18 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.