在 Kotlin 中如何解决同一行输入问题?
How can you solve an input in the same line problen in Kotlin?
我在使用 Kotlin 中的控制台应用程序时遇到问题。该程序在同一行中读取两个变量。如果我没记错的话,这只能用 readLine()!!.split(" ") 来完成 问题是下一个。它需要2个输入。当只提供一个输入时,程序会因越界而崩溃,因为没有输入第二个变量。在任务中,程序必须使用输入 /exit 退出。我不知道该怎么做。为第二个输入输入 space 不是一个选项,因为测试不接受它。提前致谢。
按以下格式输入两个数字:{source base} {target base}(退出类型/exit)> 36 10
输入以 36 为基数的数字以转换为以 10 为基数(返回类型 /back)> abcde
转换结果:17325410
按以下格式输入两个数字:{source base} {target base} (退出类型 /exit) > /exit
我不会回答你提出的所有问题,只是解决你的 OutOfBoundException
,因为它看起来像 homework question 对我来说。
如果您不介意为 /exit
以外的输入抛出 OutOfBoundException
,以下内容可能适合您。
val line = readln().trim()
if (line == "/exit") {
// exit, e.g. through System.exit(0) or other means
} else {
val bases = line
.split(" ")
.map { it.toInt() }
val (sourceBase, targetBase) = bases
// carry on with your program ...
}
您可能希望在拆分输入并将其转换为数字之前明确验证 /exit
以外的输入。
在这个简单的例子中,您可以利用正则表达式来验证用户输入。以下内容可能对您有用。
require(line.matches("""^\d+ \d+$""".toRegex())) {
"You must enter two integer numbers delimited by a single space character!"
}
如果你还没有接触过正则表达式(regex),我会为你拆开上面的内容:
^
- 从行首开始验证
\d
- 匹配任何数字
+
- 匹配前一个标记(任何数字)一次到无限次,尽可能多
- 按字面意思匹配白色 space 字符
\d
- 匹配任何数字
+
- 匹配前一个标记(任何数字)一次到无限次,尽可能多
$
- 验证直到行尾
我有意识地省略了任何控制流结构,因为这些与 OutOfBoundException
.
无关
我在使用 Kotlin 中的控制台应用程序时遇到问题。该程序在同一行中读取两个变量。如果我没记错的话,这只能用 readLine()!!.split(" ") 来完成 问题是下一个。它需要2个输入。当只提供一个输入时,程序会因越界而崩溃,因为没有输入第二个变量。在任务中,程序必须使用输入 /exit 退出。我不知道该怎么做。为第二个输入输入 space 不是一个选项,因为测试不接受它。提前致谢。
按以下格式输入两个数字:{source base} {target base}(退出类型/exit)> 36 10 输入以 36 为基数的数字以转换为以 10 为基数(返回类型 /back)> abcde 转换结果:17325410
按以下格式输入两个数字:{source base} {target base} (退出类型 /exit) > /exit
我不会回答你提出的所有问题,只是解决你的 OutOfBoundException
,因为它看起来像 homework question 对我来说。
如果您不介意为 /exit
以外的输入抛出 OutOfBoundException
,以下内容可能适合您。
val line = readln().trim()
if (line == "/exit") {
// exit, e.g. through System.exit(0) or other means
} else {
val bases = line
.split(" ")
.map { it.toInt() }
val (sourceBase, targetBase) = bases
// carry on with your program ...
}
您可能希望在拆分输入并将其转换为数字之前明确验证 /exit
以外的输入。
在这个简单的例子中,您可以利用正则表达式来验证用户输入。以下内容可能对您有用。
require(line.matches("""^\d+ \d+$""".toRegex())) {
"You must enter two integer numbers delimited by a single space character!"
}
如果你还没有接触过正则表达式(regex),我会为你拆开上面的内容:
^
- 从行首开始验证\d
- 匹配任何数字+
- 匹配前一个标记(任何数字)一次到无限次,尽可能多
\d
- 匹配任何数字+
- 匹配前一个标记(任何数字)一次到无限次,尽可能多
$
- 验证直到行尾
我有意识地省略了任何控制流结构,因为这些与 OutOfBoundException
.