es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué este array, que yo lleno en el constructor, no se encuentra lleno después de que el constructor finalice?

Quiero imprimir un array de valores aleatorios y un array de factoriales.

abstract class AClass {

<pre><code>Numbers: Array<number>;
NumbersFact: Array<number>;

constructor(Numbers: Array<number>, NumbersFact: Array<number>) {

    this.Numbers = Numbers;
    this.NumbersFact = NumbersFact;

    for (var i = 0; i < 10; ++i) Numbers[i] = i;

    Numbers = this.fill(Numbers);
    NumbersFact = this.factorial(Numbers);

    console.log(Numbers);
    console.log(NumbersFact);
}
</code></pre>

<p><code>
Todo funciona correctamente.
console.log muestra dos arrays.
</code>
    fill(array: number[]): number[] {</p>

<pre><code>    // Añade números aleatorios en [Numbers]
    var tmp: number, current: number, top = array.length;
    if (top) while (--top) {
        current = Math.floor(Math.random() * (top + 1));
        tmp = array[current];
        array[current] = array[top];
        array[top] = tmp;
    }
    return array;
}
</code></pre>

<p><code>
Primer array con valores aleatorios del 0 al 9.
</code>
    factorial(array: Array<number>): Array<number> {
        // Crea un array de factoriales a partir de [Numbers].
        var arrayFact = [];
        for (var i = 0; i < array.length; ++i) {
            const fact = (x: number) => {
                return (x == 0) ? 1 : x * fact(x - 1);
            }</p>

<pre><code>        arrayFact.push(fact(array[i]));
    }

    return arrayFact
}
</code></pre>

<p><code>
Segundo array con valores factoriales del primer array.
</code>
    abstract sort(): void;
}</p>

<p>class Class1 extends AClass {
    sort(): void { }
}</p>

<p>var test = new Class1([], []);</p>

<p>console.log(test);
console.log(test.Numbers);
console.log(test.NumbersFact);

Resultado

console.log en el constructor:
– (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5],
– (10) [1, 40320, 24, 720, 6, 5040, 1, 362880, 2, 120].

consol.log al final del código:
– Class1 {Numbers: Array(10), NumbersFact: Array(0)}
– (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5]
– []

¿Por qué el segundo array está vacío?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El segundo array está vacío porque los dos arrays (Numbers y NumbersFact) se pasan como arrays vacíos al constructor de la Clase1, que es una subclase de AClass. Esto significa que los arrays Numbers y NumbersFact pasados al constructor nunca se llenan con ningún valor ya que los métodos fill() y factorial() se llaman dentro del constructor de AClass.

    Para solucionar esto, podemos pasar arrays llenos al constructor de Class1 o anular el constructor de Class1 para llamar al constructor de AClass con arrays llenos. Por ejemplo:

    class Class1 extends AClass {
      constructor() {
        super([], []); // llamando al constructor de AClass con arrays vacíos
        this.sort();
      }
      sort(): void {}
    }
    
    var test = new Class1();
    
    console.log(test.Numbers); // imprime (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5]
    console.log(test.NumbersFact); // imprime (10) [1, 40320, 24, 720, 6, 5040, 1, 362880, 2, 120]
    

Comments are closed.