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


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

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

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

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

另一种选择是使用 Java 扫描程序

首先导入文件顶部的扫描程序。

import java.util.Scanner

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

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

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

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

最新更新