当前位置: 首页 > 知识库问答 >
问题:

在Kotlin-Android中不调用带有参数的函数

叶德本
2023-03-14
    package com.begors.titactoe

import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    var currentPlayer = 1

    //Defining two lists of ids that each player will select
    var playerOneClickedListId = ArrayList<Int>()
    var playerTwoClickedListId = ArrayList<Int>()

    fun buClick(view: View) {

        //getting id of the current clicked button
        var clickedButton = view as Button
        var clickedButtonId = clickedButton.id.toString().toInt()

        //Playing game
        if (currentPlayer == 1){
            playerOneClickedListId.add(clickedButtonId)
            clickedButton.setText("X")
            clickedButton.isEnabled=false
            checkWinner(playerOneClickedListId,currentPlayer) // All works perfectly except this line!!!!!!!
            currentPlayer=2
        }else{
            playerTwoClickedListId.add(clickedButtonId)
            clickedButton.setText("O")
            clickedButton.isEnabled=false
            checkWinner(playerTwoClickedListId,currentPlayer)// All works perfectly except this line!!!!!!!
            currentPlayer=1
    }
}
    //Function that checks for the winner based on their selection - DOES NOT WORK
    fun checkWinner(playerArrayList: ArrayList<Int>, currentPlayer : Int){
        if (playerArrayList.contains(1) && playerArrayList.contains(2) && playerArrayList.contains(3) ||
            playerArrayList.contains(4) && playerArrayList.contains(5) && playerArrayList.contains(6) ||
            playerArrayList.contains(7) && playerArrayList.contains(8) && playerArrayList.contains(9) ||
            playerArrayList.contains(1) && playerArrayList.contains(4) && playerArrayList.contains(7) ||
            playerArrayList.contains(2) && playerArrayList.contains(5) && playerArrayList.contains(8) ||
            playerArrayList.contains(3) && playerArrayList.contains(6) && playerArrayList.contains(9))
        {
            Toast.makeText(this, "Winner is player $currentPlayer", Toast.LENGTH_LONG).show()
        }
    }

    // Button event that will reset the game
    fun resetGame(view : View){
        bu1.isEnabled=true
        bu1.setText("")
        bu2.isEnabled=true
        bu2.setText("")
        bu3.isEnabled=true
        bu3.setText("")
        bu4.isEnabled=true
        bu4.setText("")
        bu5.isEnabled=true
        bu5.setText("")
        bu6.isEnabled=true
        bu6.setText("")
        bu7.isEnabled=true
        bu7.setText("")
        bu8.isEnabled=true
        bu8.setText("")
        bu9.isEnabled=true
        bu9.setText("")
        playerOneClickedListId.clear()
        playerTwoClickedListId.clear()
    }
}

嗨,我为tictactoe游戏编写了这个示例代码,除了checkWinner函数之外,其他都正常工作,它接受两个参数ArrayList和currentPlayer来检查胜利者。该函数在每个玩家在tictactoe游戏中查看获胜的点击单元格后调用。我不知道错误在哪里!事先谢谢你

共有1个答案

施梓
2023-03-14

我想你忘了检查斜线
添加

playerArrayList.contains(7) && playerArrayList.contains(5) && playerArrayList.contains(3) ||

playerArrayList.contains(1) && playerArrayList.contains(5) && playerArrayList.contains(9)


并确保按钮id以正确的顺序写入

 类似资料:
  • 我有以下代码: 我不希望字段ui有一个getter,但是kotlin在默认情况下会生成它,因为它是构造函数中定义的val。 在properties and fields文档中,我发现我可以用以下代码生成一个私有getter 但我在构造函数定义中找不到这样做的方法

  • 问题内容: 我正在向Django的模板传递一个函数,该函数返回一些记录。我想调用此函数并遍历其结果。 那不行 我试图将函数的返回值设置为变量并遍历该变量,但是似乎没有办法在Django模板中设置变量。 有什么正常的方法吗? 问题答案: 你不能调用在模板中需要参数的函数。写一个模板标签或过滤器。

  • 我想为实现接口的类中的函数参数使用默认值,如下所示: 现在这里是编译的,这里是不编译的: KO:不允许重写函数为其参数指定默认值 KO:类“LocalFileStoreService”不是抽象的,并且没有实现抽象成员公共抽象存储文件(路径:String,负载:InputStream,类型:MediaType):fqn中定义的单元。。。文件存储服务 好 啊: 这是预期的行为吗?有没有更好的方法来管理

  • 我正试图将一个Android应用程序从Java转换为Kotlin。应用程序中有几个单人。我为没有构造函数参数的单例使用了一个伴生对象。还有另一个接受构造函数参数的单例。 Java代码:

  • 我是kotlin的新手,我总是编写java。我尝试了kotlin以java方式编写的一些函数代码,但不起作用。 我将这些代码翻译成java,它就可以工作了。 即使FInter是java接口。它也不起作用。 使现代化 我尝试了一些不同的方法,现在它们都是工作。

  • 我有一个用Kotlin编写的Android应用程序,带有一个扩展了DigitsKeyListener的类。我的最低SDK版本是。该类当前正在调用一个不推荐使用的构造函数。然而,新的构造器只能从API级别26及以上的版本中获得。如何根据API级别有条件地调用构造函数? 不久前,我基本上发布了Android的相同问题,但该解决方案在Kotlin中似乎不起作用。 在静态编程语言中,我的类现在看起来像这样