Android Kotlin返回表达式
我用谷歌搜索了一下,但我碰到了一堵墙 我有一个返回Int的函数。它告诉我需要在整个函数中添加另一个返回表达式,但我不知道需要在哪里正确执行,我尝试了一些变体,包括在if语句中添加相同的return,但在结束标记之前添加,结束标记在代码的其余部分中抛出错误 我这样调用函数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
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会更好ifcat
既不是1,也不是2,也不是3,也不是4?在这种情况下,函数没有任何要返回的内容。如果您知道这种情况永远不会发生,那么可以在末尾添加断言,或者抛出异常。另外请注意,return
之后的块中的任何代码都不会运行,因此listofas.clear()
将永远不会执行。我建议使用“when”,然后您可以使用:return when()…感谢您的帮助谢谢,我一直保持var,现在我增加了你的回复,因为它确实有帮助,但我不得不接受之前的回复作为接受的答案,因为这最终是我采取的路线,但非常感谢你的帮助。没问题,非常感谢你的好意。谢谢你的回复和额外的提示。我已经在全球范围内宣布了这些观点,然后只是在“立即创建”上进行了初始化。我还按照建议对if语句进行了重新构造,这样就不需要重复编写一次的条目s。由于我还定期激活和停用按钮,我为此创建了一个功能,以尽量减少代码重复