Keresés

Új hozzászólás Aktív témák

  • csendes

    őstag

    Sziasztok, elég kihalt itt, de talán olvassa valaki. Kezdő tanfolyam vizsgafeladatnál akadtam el a függvényeknek történő paraméterátadás rejtélyeinél. A példa egy vizsgafeladatból lett kimazsolázva, önmagában nincs értelme, csak szemléltetésképpen készült. [Kotlin Playground]-on lett futtatva, a vizsga is hasonló környezetben volt. Utólag sikerült az eredeti feladatot másképp megoldani, de nem értem, hogy miért módosulnak az értékként a függvény hívásakor átadott paraméterek. :F
    Kód:
    /*
    * You can edit, run, and share this code.
    * play.kotlinlang.org
    */
    import java.util.Arrays

    fun mySubFunction(entry: Int):Int {
    var newentry=entry
    newentry+=10
    return newentry
    }

    fun myMainFunction(anyArray: Array<Int>):Int {
    val constArray=anyArray
    println("This is the original constArray in myMainFunction: ${Arrays.toString(constArray)}")
    var newArray=constArray
    val n=newArray.count()-1
    for (i in 0..n){
    newArray[i]=mySubFunction(newArray[i])
    }
    println("This is the new anyArray in myMainFunction: ${Arrays.toString(anyArray)}") // Why is it modified?
    println("This is the new constArray in myMainFunction: ${Arrays.toString(constArray)}") // How can a const Array change?
    println("This is newArray in myMainFunction: ${Arrays.toString(newArray)}") // This is OK
    var k=1
    return k
    }

    fun main() {
    var myArray=arrayOf<Int>(1,2,3,4,5)
    var counter: Int
    counter=myMainFunction(myArray)
    println("This is the new myArray in Main: ${Arrays.toString(myArray)}") // How can this change, the function has only returned an integer?
    }

    Eredmény/output:
    This is the original constArray in myMainFunction: [1, 2, 3, 4, 5]
    This is the new anyArray in myMainFunction: [11, 12, 13, 14, 15]
    This is the new constArray in myMainFunction: [11, 12, 13, 14, 15]
    This is newArray in myMainFunction: [11, 12, 13, 14, 15]
    This is the new myArray in Main: [11, 12, 13, 14, 15]

    Ki állította meg az órát? Néha az az érzésem, hogy Magyarországot is Kínában gyártották.

  • csendes

    őstag

    válasz LioshDev #23 üzenetére

    Köszönöm :R. Azért érdekes ez, mert a val constArray=anyArray (vagyis nem változó, hanem konstans) alapján az értéke nem változhatna, de constArray valójában egy pointer, ami a tömb első elemére mutat.

    [ Szerkesztve ]

    Ki állította meg az órát? Néha az az érzésem, hogy Magyarországot is Kínában gyártották.

  • csendes

    őstag

    válasz Reno7 #25 üzenetére

    A Kotlin a Javahoz közeli programozási nyelv, statically typed, szemben a Pythonnal, ami dynamically typed.
    Próbáld futtatni az alábbi kódot szemléltetésként, itt is eléred [link]:
    import java.math.BigDecimal
    import java.math.BigInteger

    fun main(){
    var adat = arrayOf(
    arrayOf("a", "b", "c"),
    arrayOf(1, 5, 6),
    arrayOf(9, 4, 3)
    )
    println(adat::class.simpleName);
    println(adat[2][0]::class.simpleName);
    println(adat[1][1]::class.simpleName);
    val osszeg = BigDecimal(adat[2][0].toString())/BigDecimal(adat[1][1].toString());
    println("%.1f".format(osszeg));
    println(osszeg::class.simpleName);
    val osszeg1 = BigDecimal(adat[2][0].toString().toDouble().toString())/BigDecimal(adat[1][1].toString());
    println(osszeg1);
    println(osszeg1::class.simpleName);
    val osszeg2 = BigInteger(adat[2][0].toString())/BigInteger(adat[1][1].toString());
    println(osszeg2);
    println(osszeg2::class.simpleName);
    val osszeg3 = BigDecimal(9.toDouble()/5);
    println(osszeg3);
    val osszeg4 = 9/5;
    println(osszeg4);
    }

    Ha jól másoltam be, akkor az eredmény:
    Array
    Int
    Int
    2.0
    BigDecimal
    1.8
    BigDecimal
    1
    BigInteger
    1.8000000000000000444089209850062616169452667236328125
    1

    [ Szerkesztve ]

    Ki állította meg az órát? Néha az az érzésem, hogy Magyarországot is Kínában gyártották.

Új hozzászólás Aktív témák