Atomic Kotlin:InKeyword/Task4.kt:`val num = 0..9` 在 `string[i] in num` 中不起作用
Atomic Kotlin: InKeyword/Task4.kt: `val num = 0..9` does not work in `string[i] in num`
我是编程和通过学习课程学习 Kotlin 的初学者:Atomic Kotlin。
我正在解决一个练习,但不明白为什么我的部分代码不起作用。
我可以在课程中看到答案代码,但我想知道如何解决我的问题。
问题
我制作了 val num = 0..9
并在 wholeStringChecker()
中使用它,这样 wholeStringChecker()
可以 return 对其中包含数字(0 到 9)的字符串为真。
但是,在 main()
的结果中,isValidIdentifier("name0")
将 false
提供给 0
。
课程提供答案代码,我可以看懂代码,但我想了解导致我的代码结果的原因。
-用 couese
编写的练习说明
编写一个函数来检查它的字符串参数是否是一个有效的标识符。有效标识符是以字母或下划线开头且仅由字母、数字和下划线组成的非空字符串。
使用 s.isEmpty() 检查 s 是否为空字符串。
-完整代码
// InKeyword/Task4.kt
package theInKeywordExercise4
fun isValidIdentifier(s: String): Boolean {
val atoz = 'a'..'z'
val AtoZ = 'A'..'Z'
val num = 0..9
fun emptyChecker(string: String): Boolean = string.isNotEmpty()
fun initialChecker(string: String) :Boolean = string[0] in atoz || string[0] in AtoZ || string[0] in "_"
fun wholeStringChecker(string: String): Boolean {
var i = 0
var counter = 0
while (i <= string.lastIndex) {
if (string[i] in atoz || string[i] in AtoZ || string[i] in num || string[i] in "_")
println("true ${string[i]}")
else {
println("false ${string[i]}")
counter++
}
i++
}
println("counter is $counter")
if (counter > 0) {
println("wholeStringChecker false")
return false
} else {
println("wholeStringChecker true")
return true
}
}
return emptyChecker(s) && initialChecker(s) && wholeStringChecker(s)
}
fun main() {
println(isValidIdentifier("name0"))
}
-结果
true n
true a
true m
true e
false 0
counter is 1
wholeStringChecker false
false
*我预计 0 会成立,因为我在 wholeStringChecker()
.
中写了 if (string[i] in atoz || string[i] in AtoZ || string[i] in num || string[i] in "_")
考虑
val num = '0'..'9'
您正在查看字符串中的字符,因此您想要比较字符,而不是整数。
我是编程和通过学习课程学习 Kotlin 的初学者:Atomic Kotlin。
我正在解决一个练习,但不明白为什么我的部分代码不起作用。
我可以在课程中看到答案代码,但我想知道如何解决我的问题。
问题
我制作了 val num = 0..9
并在 wholeStringChecker()
中使用它,这样 wholeStringChecker()
可以 return 对其中包含数字(0 到 9)的字符串为真。
但是,在 main()
的结果中,isValidIdentifier("name0")
将 false
提供给 0
。
课程提供答案代码,我可以看懂代码,但我想了解导致我的代码结果的原因。
-用 couese
编写的练习说明编写一个函数来检查它的字符串参数是否是一个有效的标识符。有效标识符是以字母或下划线开头且仅由字母、数字和下划线组成的非空字符串。
使用 s.isEmpty() 检查 s 是否为空字符串。
-完整代码
// InKeyword/Task4.kt
package theInKeywordExercise4
fun isValidIdentifier(s: String): Boolean {
val atoz = 'a'..'z'
val AtoZ = 'A'..'Z'
val num = 0..9
fun emptyChecker(string: String): Boolean = string.isNotEmpty()
fun initialChecker(string: String) :Boolean = string[0] in atoz || string[0] in AtoZ || string[0] in "_"
fun wholeStringChecker(string: String): Boolean {
var i = 0
var counter = 0
while (i <= string.lastIndex) {
if (string[i] in atoz || string[i] in AtoZ || string[i] in num || string[i] in "_")
println("true ${string[i]}")
else {
println("false ${string[i]}")
counter++
}
i++
}
println("counter is $counter")
if (counter > 0) {
println("wholeStringChecker false")
return false
} else {
println("wholeStringChecker true")
return true
}
}
return emptyChecker(s) && initialChecker(s) && wholeStringChecker(s)
}
fun main() {
println(isValidIdentifier("name0"))
}
-结果
true n
true a
true m
true e
false 0
counter is 1
wholeStringChecker false
false
*我预计 0 会成立,因为我在 wholeStringChecker()
.
if (string[i] in atoz || string[i] in AtoZ || string[i] in num || string[i] in "_")
考虑
val num = '0'..'9'
您正在查看字符串中的字符,因此您想要比较字符,而不是整数。