【问题标题】:I can't print array elements (kotlin.Unit)我无法打印数组元素 (kotlin.Unit)
【发布时间】:2023-04-10 21:26:01
【问题描述】:

我添加了所有代码。我想写入数组的所有元素,但我只能在屏幕上看到“kotlin.Unit”。例如,如果我将三个“ozet”添加到“bilgiler”,我会看到三个“kotlin.Unit”。这与数组类型有关吗? (我在发送时删除了“菜单”功能) enter image description here

    package OOP

class Ogrenci constructor(var isim:String,var numara:Int)
{
fun bilgileriGoster ()
{

    println("Öğrencinin Adı: $isim"+" "+ "($numara)")

    print("İlk sınav notunu girin: ")
    var not1 = readLine()!!.toInt()

    print("İkinci sınav notunu girin: ")
    var not2 = readLine()!!.toInt()

    var ortalama:Float = (not1+not2).toFloat()/2
    println("$isim adlı öğrencinin ortalaması:"+ortalama )
}
    fun ozet()
    {
        var ozet = "$isim,$numara"
    }
}
    fun main()
{
    var bilgiler = arrayListOf<Any>(0)

 var Seçim = Menu()
while (true){
    if (Seçim==1) {
        println("Öğrenci Adını Giriniz:")
        var ad: String = readLine().toString()
        println("Öğrenci Numarasını Giriniz:")
        var numara: Int = readLine()!!.toInt()

        var ogr1: Ogrenci = Ogrenci(ad, numara)
        ogr1.bilgileriGoster()
        println()

        var ozet = ogr1.ozet()
        bilgiler.add(bilgiler.size,ozet)

        println("1-Devam")
        println("2-Çıkış")
        print("Seçim:")
        var karar = readLine()!!.toInt()

        if (karar==2)
        {
            for (index in bilgiler)
        {
            print(index)
        }
            break
        }

    }
    }

}

【问题讨论】:

  • 如果没有更多上下文,很难为您提供帮助。解决这个问题的一种方法是添加一些类型,尤其是在ogr1ozetbilgiler 上。如果你这样做,你可能会自己意识到这个问题。
  • 你在那里写的东西没有任何意义。为什么在if 语句中添加break?如果您打算将break 放入for 循环,这意味着for 循环将在第一次迭代后中断。如果删除break 后仍然出现错误,请发布一个重现您的问题的最小示例
  • 我的猜测是ogr1.ozet() 返回单位,因此我们需要查看这个函数
  • @Fred 好消息!我假设bilgiler 是某种列表,但在不知道确切类型(可能是List&lt;Unit&gt;List&lt;Any&gt;)的情况下很难分辨
  • @Fred 我添加了所有代码

标签: android arrays intellij-idea kotlin


【解决方案1】:

正如我所怀疑的,函数ozet() 返回Unit,因为它的声明如下:

fun ozet() {
    var ozet = "$isim,$numara"
}

当省略返回类型时,kotlin 知道是Unit,所以同理:

fun ozet(): Unit {
    var ozet = "$isim,$numara"
}

因此,每次执行它并将结果放入数组时,您都会返回一个 Unit 对象,这就是您看到 Unit 的原因。

很难说数组中到底应该是什么,但我想很容易意识到它需要是从ozet 返回的东西。

如果你想放变量的内容,你可以简单地把它改成:

fun ozet() = "$isim,$numara"

这是以下的简写:

fun ozet(): String {
    return "$isim,$numara"
}

【讨论】:

  • 谢谢,成功了。另外,如何将 'var ortalama' 添加到 'fun ozet():String' 中?
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2011-03-23
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多