如何在一行中获取两种不同数据类型的用户输入?

问题描述 投票:0回答:2
var (a,b)= readLine()!!.split(" ").map { it.toInt() }

即将在一行中取一种数据类型。 但是我怎样才能采用与上面相同的两种不同的数据类型呢?喜欢-“整数”空间“浮动” 我必须将用户输入 - 整数 a 和浮点数 b 放在一行中并带有一个空格。 // 1 2.0

fun main(){
    //var (a,b)= readLine()!!.split(" ").map { it.toInt() }
    var a = readLine()!!.toInt()
    var b= readLine()!!.toFloat()
    if (a>b){
        var roundNumber= "%.2f".format(b)
        println(roundNumber)
    }
    else if (a%5==0 && b>=a+0.5){
        var c= b-(a+0.5)
        var roundNumber= "%.2f".format(c)
        println(roundNumber)
    }
    else{
        var roundNum= "%.2f".format(b)
        println(roundNum)
    }
}

输入: 30 120.00 输出: 89.50(有效) .... 但事实是我必须将两个输入与一个空格放在一行中。 输入: 30 120.00

kotlin split user-input
2个回答
0
投票

您正在尝试使用

toInt()
映射整数和浮点数的字符串表示形式,这将为浮点输入返回 null,这不是您想要的。

一种解决方案是将行拆分为字符串列表,然后分别转换它们

val components = readLine()!!.split(" ")
val a = components[0].toInt()
val b = components[1].toFloat()

另一个选择是使用 Java 扫描器

首先在文件顶部导入扫描仪。

import java.util.Scanner

然后创建一个扫描仪对象并使用它从输入行中提取值。

  val scanner = Scanner(readLine())
  val a = scanner.nextInt()
  val b = scanner.nextFloat()

0
投票

我猜你需要使用 try-catch 语句将每个输入单独映射到一个列表中,然后将任何一个转换为所需的类型,如果不是无效输入(当然)。

fun main() {

    val cordTTT = readln().split(' ').map {
        try {
            it.toFloat()
        } catch (e: Exception) {
            "not applicable"
        }
    }

    cordTTT.forEach(::println)

}
© www.soinside.com 2019 - 2024. All rights reserved.