Kotin练习

package com.example.kotlin

import android.os.Bundle
import android.security.identity.IdentityCredentialException
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.IndexOutOfBoundsException
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
import kotlin.math.max
import kotlin.math.min

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tv_btn.setOnClickListener{
            Log.d("das","da")
        }


        main()
        main2()
        main3()
        val uu = metnuber(17,6)
       println("**-"+uu)
       val i = ifmax(5,7)
        println("**"+i)
        println("输出"+scroc("6"))
        println("输出21*"+getscroc("8"))
        forNumber(0,6)
        forNumber2(0,10)
        fordown(0,10)
        Student("lp",55)
        main4()
        Singleton.sigletonTest()

        var list = listOf("1","2","3")
        for (i in list) {
            println(i)
        }
        listAdd()
        setOf()
        listOf()
        map()
        Api()
        filter()
        api2()
        Threads()
        noNUll()
      val uud = textlength("45")
        println("输出"+uud)
        Stringprice()
        var id= ArrayList<Int>(4)
        id.add(6)
        id.add(5)
        id.add(8)
        id.add(2)
        paixun(id)

        for (i in id) {
            println("打2d"+i)
        }
        quicksort(id,0,2)
        for (i in id) {
            println("打2dd"+i)
        }
    }
    fun main() {
        println("dada213")
    }
    fun main2() {
        var i =5;
        println("i="+i*i)
    }
    fun main3() {
        var i =5
        i+=i
        println(""+i)
    }
    fun metnuber(parmal : Int,parmal2 : Int) : Int {
        return min(parmal,parmal2)
    }
    fun ifmax(parmal: Int,parmal2: Int) =if (parmal > parmal2)parmal else parmal2
    fun scroc(nuber:String) = if (nuber.equals("1")) 1 else if (nuber.equals("2")) 2 else 3
    fun getscroc(name:String) = when(name) {
        "1"->1
        "2"->2
        "3"->3
        else -> 0
    }
    //i..u 表示i到u的区间
    fun forNumber(i : Int,u :Int) {
        for (i in i..u) {
            println("*"+i)
        }
    }
    //依次递减2
    fun forNumber2(i : Int ,u : Int) {
        for (i in i until u step 2) {
            println("**"+i)
        }
    }
    //倒序 从 u 到 i
    fun fordown(i : Int,u : Int) {
        for (i in u downTo i) {
            println("***"+i)
        }
    }
    fun main4() {
        val student = Student("jack",19)
        doStudy(student)
        val cellphone1 = Cellphone("Samsung",1299.99)
        val cellphone2 = Cellphone("Samsung",1299.99)
        println("**"+cellphone1+"*"+(cellphone2==cellphone1))
    }
    fun doStudy(study: Study?) {
        if (study != null) {
            study.readBooks()
            study.doHomework()
            //效果一样 ?表示不为空
            study?.readBooks()
            study?.doHomework()
        }
        //it 是Lambda 表达式 it表示当参数只有一个时可用it代替 let是处理全局判空
        study?.let {
            it.readBooks()
            it.doHomework()
        }
    }

//    listOf不可变list数组
//    mutableListOf可变list数组
    fun listAdd() {
        var list = mutableListOf("5","6","7");
        list.add("4")
        for (i in list) {
            println("*"+i)
        }
    }
    //setof 和 mutablesetof 和list差不多但是,set因为是映射,使用无法保证有序
    fun setOf() {
        var set = setOf("5","6","4","2")
        println("*/*"+set.maxOrNull())

    }
    fun listOf() {
        val list2 = mutableListOf("5","6","4","2","3","3")
        list2.sort()
        for (ii in list2) {
            println(ii)
            for (j in list2) {
              //  if (ii == j) list2.remove(ii) else
                println(ii)
            }
        }
    }
    //map
    fun map() {
        val map = HashMap<String,Int> ()
        map.put("55",5)
        map["appp"] =1
        map["appd"] =2
       println("*da"+map.get("appd"))

        val  map2 = mapOf<String,Int>("app" to 1,"adp" to 2,"adpd2" to 3,"adpd" to 4)
        for ((Str,int) in map2) {
            println("shud"+Str+"*"+int)
        }
    }
    fun Api() {
        val list = listOf("1adad","2a","33")
        val maxlist = list.maxByOrNull{ it.length }
        Log.d("sc","*"+maxlist)

        val lambda = {fruit : String -> fruit.length}
        Log.d("sc2", "*" + list.maxByOrNull(lambda))
    }
    //输出长度小于5的list集合
    fun filter() {
        val list = listOf("55d","dasd","dasdadad","1")
        val filter = list.filter { it.length<5 }
            .map { it.uppercase(Locale.getDefault()) } //toUppcrCase 小写字母转为大写字母
        for (i in filter) {
            println(i)
        }
    }
    //all 全部满足 any至少一个满足
    fun api2() {
        val list = listOf("12","add","dasda","daad")
        val all = list.all { it.length <5 }
        val any = list.any { it.length <5 }
        println(""+all+ any)
    }

    fun Threads(){
        Thread(object : Runnable {
            override fun run() {
                Log.d("","55")
            }
        }).start()

        Thread(object : Runnable{
            override fun run() {
                Log.d("","5s5")
            }
        }).start()
        Thread(Runnable {
            Log.d("","5s5")
        }).start()
    }
    //判断非空kotlin ?表示为空时什么都不做
    fun noNUll() {
        val a : String
        val b :String
        a = ""
        b = "1"
       val c = if (a != null) {
           a
       }else {
           b
       }
        val cc= a?:b
        Log.d("输出ss","*"+c+cc)
    }
    fun textlength(text : String?) : Int{
        if (text != null) {
           return text.length
        }
        return 0
    }
    fun textLength(text :String?) = text?.length ?: 0
    //$连接符
    fun Stringprice() {
        val brand = "samsung"
        val price = 1299.3
        Log.d("输出的","brand"+brand+"price"+price)
        Log.d("输出的","Cellphone(brand=$brand,price=$price)")

    }
    fun swap(list: ArrayList<Int>, index1:Int, index2:Int) {
        val maxIndex = list.size -1
        val minIndex = 0
        if (index1 < minIndex || index1 > maxIndex) throw IndexOutOfBoundsException()
        if (index2 < minIndex || index2 > maxIndex) throw IndexOutOfBoundsException()
        val tmp = list[index1]
        list[index1] = list[index2]
        list[index2] = tmp
        println("打2"+list)
    }
    //冒泡排序
    fun paixun(list: ArrayList<Int>) {
        if (list.size == 0) return
        val maxindex =list.size -1
        var boolean = false
        for (n in 0 until maxindex) {
            Log.d("输出服从d",""+n)
            for (i in 0 until maxindex-n) {
                if (list[i] > list[i+1]) {
                    swap(list,i,i+1)
                    boolean = true
                }
            }
            if (!boolean) return
        }
    }
    //快速排序
    fun quicksort(list: ArrayList<Int>, minIndex:Int, maxIndex:Int) {
        if (minIndex >= maxIndex) return
        var i = minIndex -1;
        var tmp = list[maxIndex]
        for (j in minIndex until maxIndex) {
            if (list[j] <= tmp) {
                i++
                swap(list,i,j)
            }
        }
        swap(list,i+1,maxIndex)
        quicksort(list,minIndex,i)
        quicksort(list,i+2,maxIndex)
    }
    //选择排序
    fun max(list: ArrayList<Int>, lastIndex: Int) : Int {
        if(lastIndex == 0) return 0
        var maxIndex = 0
        var maxValue = list[0]
        for (i in 1..lastIndex) {
            if (list[i] > maxValue) {
                maxValue = list[i]
                maxIndex = i
            }
        }
        return maxIndex
    }
    //实现选择排序
    fun selectionSort(list: ArrayList<Int>) {
        val maxIndex = list.size-1
        for (i in maxIndex downTo 0) {
            var idx = max(list,i)
            swap(list,idx,i)
        }
    }
    //插入排序
    fun insertionSort(list: ArrayList<Int>) {
        val maxIndex = list.size -1
        for (i in 1..maxIndex) {
            val target = list[i]
            var idx = binarySearch(list,target,0,i-1)
            for (j in i downTo  idx+1) {
                list[j] = list[j-1]
            }
            list[idx] = target
        }
    }
    //归并排序
    fun merge(list: ArrayList<Int>, lo:Int, mi:Int, hi:Int) {
        //初始化两个数组,主要是为了在最后加上哨兵
        var leftLength = mi -lo +1
        var rightLength = hi -mi+1
        var leftList = ArrayList<Int>(leftLength)
        var rightList = ArrayList<Int>(rightLength)
        for (i in lo until mi) {
            leftList.add(list[i])
        }
        leftList.add(Int.MAX_VALUE)//哨兵
        for (i in mi until hi) {
            rightList.add(list[i])
        }
        rightList.add(Int.MAX_VALUE)//哨兵
        //归并
        var leftIndex =0
        var rightIndex =0
        var idx =lo
        val n = hi-lo
        for (i in 1..n) {//循环次数
            when {
                leftList[leftIndex] < rightList[rightIndex] -> {
                    list[idx] = leftList[leftIndex]
                    leftIndex++
                }
                leftList[leftIndex] >= rightIndex -> {
                    list[idx] = rightList[rightIndex]
                    rightIndex++
                }
            }
            idx++
        }
    }
    fun mergeSort(list: ArrayList<Int>, minIndex: Int, maxIndex: Int) {
        if (minIndex > maxIndex) return
        if (maxIndex == minIndex) return
        val mi = (minIndex+maxIndex)/2
        mergeSort(list,minIndex,mi)
        mergeSort(list,mi+1,maxIndex)
        merge(list,minIndex,mi+1,maxIndex+1)//这里主要需要+1是因为归并的实现是右开区间
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信工院李平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值