Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin返回表达式_Android_Kotlin - Fatal编程技术网

Android Kotlin返回表达式

Android Kotlin返回表达式,android,kotlin,Android,Kotlin,我用谷歌搜索了一下,但我碰到了一堵墙 我有一个返回Int的函数。它告诉我需要在整个函数中添加另一个返回表达式,但我不知道需要在哪里正确执行,我尝试了一些变体,包括在if语句中添加相同的return,但在结束标记之前添加,结束标记在代码的其余部分中抛出错误 我这样调用函数 var ans = GetQuestion(1) fun GetQuestion(cat:Int): Int { val btn1 = findViewById(R.id.button1) as Button val btn

我用谷歌搜索了一下,但我碰到了一堵墙

我有一个返回Int的函数。它告诉我需要在整个函数中添加另一个返回表达式,但我不知道需要在哪里正确执行,我尝试了一些变体,包括在if语句中添加相同的return,但在结束标记之前添加,结束标记在代码的其余部分中抛出错误

我这样调用函数

var ans = GetQuestion(1)


fun GetQuestion(cat:Int): Int {
val btn1 = findViewById(R.id.button1) as Button
val btn2 = findViewById(R.id.button2) as Button
            val btn3 = findViewById(R.id.button3) as Button
            val btn4 = findViewById(R.id.button4) as Button

            btn1.setVisibility(View.VISIBLE)
            btn2.setVisibility(View.VISIBLE)
            btn3.setVisibility(View.VISIBLE)
            btn4.setVisibility(View.VISIBLE)

            val initialimageview = findViewById(R.id.imageview_Qresponse) as ImageView
            initialimageview.setBackgroundResource(R.drawable.question_2);

            val viewQ = findViewById(R.id.textview_question) as TextView
            if (cat==1) { // Multiplication
                var a = rand(5,80)
                var b = rand(2,50)
                val ans = a * b
                var opType = " X "
                viewQ.text = ("" + a + " " + opType + " " + b + "?");
                val listOfAns = mutableListOf(ans,ans-a,ans-b,ans+a)
                listOfAns.shuffle()
                btn1.text=("" + listOfAns.elementAt(0))
                btn2.text=("" + listOfAns.elementAt(1))
                btn3.text=("" + listOfAns.elementAt(2))
                btn4.text=("" + listOfAns.elementAt(3))
                return ans
                listOfAns.clear()
            }
            if (cat==2) { // Addition
                var a = rand(5,250)
                var b = rand(2,140)
                val ans = a + b
                var opType = " + "
                viewQ.text = ("" + a + " " + opType + " " + b + "?");
                val listOfAns = mutableListOf(ans,ans+rand(2,4),ans+rand(5,10),ans-rand(2,10))
                listOfAns.shuffle()
                btn1.text=("" + listOfAns.elementAt(0))
                btn2.text=("" + listOfAns.elementAt(1))
                btn3.text=("" + listOfAns.elementAt(2))
                btn4.text=("" + listOfAns.elementAt(3))
                return ans
                listOfAns.clear()
            }
            if (cat==3) { // Subtraction
                var a = rand(80,150)
                var b = rand(2,79)
                var ans = a - b
                var opType = " - "
                viewQ.text = ("" + a + " " + opType + " " + b + "?");
                val listOfAns = mutableListOf(ans,ans+rand(2,5),ans+rand(6,10),ans-rand(2,10))
                listOfAns.shuffle()
                btn1.text=("" + listOfAns.elementAt(0))
                btn2.text=("" + listOfAns.elementAt(1))
                btn3.text=("" + listOfAns.elementAt(2))
                btn4.text=("" + listOfAns.elementAt(3))
                return ans
                listOfAns.clear()
            }
            if (cat==4) { // Division
                var safedivision = rand(3,16)
                var b = rand(2,20)
                var a = b * safedivision
                var ans = a / b
                var opType = " / "
                viewQ.text = ("" + a + " " + opType + " " + b + "?");
                val listOfAns = mutableListOf(ans,ans+rand(2,5),ans+rand(6,10),ans-rand(2,10))
                listOfAns.shuffle()
                btn1.text=("" + listOfAns.elementAt(0))
                btn2.text=("" + listOfAns.elementAt(1))
                btn3.text=("" + listOfAns.elementAt(2))
                btn4.text=("" + listOfAns.elementAt(3))
                return ans
                listOfAns.clear()
            }
  }

作为补充说明,我不确定在编写var ans=GetQuestion(1)时是否必须使用var of val,但是这两种方法都会抛出相同的返回错误,因此我可以在以后需要时对其进行修改,您可以将变量ans保持在函数顶部,如下所示-

 var ans = 0
并将all if条件中的val ans替换为ans。在最后一个} 添加返回语句

return ans

如果函数体没有
return
关键字,则If-else的两侧都必须包含return,例如:

fun dummyFunc(Int a):Int{
    if (a > 0){
        return 5
    }else{
        return -5
    }
}
在这种情况下,不需要在代码末尾添加另一个返回。但是在您的代码中,您没有else块,所以您要么按照上面由Priyanka Rajput给出的答案进行操作,要么使用ad-else语句。毕竟,您的代码重用了if块中的代码,您可以在编写完所有
if
s之后提取它们并添加:

fun GetQuestion(cat:Int): Int {
    val btn1 = findViewById(R.id.button1) as Button
    val btn2 = findViewById(R.id.button2) as Button
    val btn3 = findViewById(R.id.button3) as Button
    val btn4 = findViewById(R.id.button4) as Button

    btn1.setVisibility(View.VISIBLE)
    btn2.setVisibility(View.VISIBLE)
    btn3.setVisibility(View.VISIBLE)
    btn4.setVisibility(View.VISIBLE)

    val initialimageview = findViewById(R.id.imageview_Qresponse) as ImageView
    initialimageview.setBackgroundResource(R.drawable.question_2);

    val viewQ = findViewById(R.id.textview_question) as TextView
    
    var a = 0
    var b = 0
    var ans = 0
    var opType = ""
    var viewQText = ""
    var listOfAns = mutableListOf()

    if (cat==1) { // Multiplication
        var a = rand(5,80)
        var b = rand(2,50)
        val ans = a * b
        var opType = " X "
        viewQText = ("" + a + " " + opType + " " + b + "?");
        val listOfAns = mutableListOf(ans,ans-a,ans-b,ans+a)
    }
        if (cat==2) { // Addition
            a = rand(5,250)
            b = rand(2,140)
            ans = a + b
            opType = " + "
            viewQText = ("" + a + " " + opType + " " + b + "?");
            listOfAns = mutableListOf(ans,ans+rand(2,4),ans+rand(5,10),ans-rand(2,10))
         }
        if (cat==3) { // Subtraction
            a = rand(80,150)
            b = rand(2,79)
            ans = a - b
            opType = " - "
            viewQText = ("" + a + " " + opType + " " + b + "?");
            listOfAns = mutableListOf(ans,ans+rand(2,5),ans+rand(6,10),ans-rand(2,10))
            }
        if (cat==4) { // Division
            safedivision = rand(3,16)
            b = rand(2,20)
            a = b * safedivision
            ans = a / b
            opType = " / "
            viewQText = ("" + a + " " + opType + " " + b + "?");
            listOfAns = mutableListOf(ans,ans+rand(2,5),ans+rand(6,10),ans-rand(2,10))
        }



                viewQ.text = viewQText
                
                listOfAns.shuffle()
                btn1.text=("" + listOfAns.elementAt(0))
                btn2.text=("" + listOfAns.elementAt(1))
                btn3.text=("" + listOfAns.elementAt(2))
                btn4.text=("" + listOfAns.elementAt(3))
                return ans
                listOfAns.clear()
  }

在这样做的过程中,我意识到您有很多样式和编码问题。首先,您不能过多地调用
findviewbyd
方法,这很昂贵。您必须将
视图
声明为全局变量,并在
onCreate
方法中初始化它们。第二,你不使用
listofas
,也许你有其他的计划,你以后会使用,我不知道,但我所知道的是,你的代码一直运行到带有
return
关键字的行,这意味着
listofas.clear()
不会执行。如果您使用when而不是if-else会更好

if
cat
既不是1,也不是2,也不是3,也不是4?在这种情况下,函数没有任何要返回的内容。如果您知道这种情况永远不会发生,那么可以在末尾添加断言,或者抛出异常。另外请注意,
return
之后的块中的任何代码都不会运行,因此
listofas.clear()
将永远不会执行。我建议使用“when”,然后您可以使用:return when()…感谢您的帮助谢谢,我一直保持var,现在我增加了你的回复,因为它确实有帮助,但我不得不接受之前的回复作为接受的答案,因为这最终是我采取的路线,但非常感谢你的帮助。没问题,非常感谢你的好意。谢谢你的回复和额外的提示。我已经在全球范围内宣布了这些观点,然后只是在“立即创建”上进行了初始化。我还按照建议对if语句进行了重新构造,这样就不需要重复编写一次的条目s。由于我还定期激活和停用按钮,我为此创建了一个功能,以尽量减少代码重复