Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么while循环引发未解决的引用错误,而for循环在kotlin中运行良好_Kotlin - Fatal编程技术网

为什么while循环引发未解决的引用错误,而for循环在kotlin中运行良好

为什么while循环引发未解决的引用错误,而for循环在kotlin中运行良好,kotlin,Kotlin,刚在与kotlin合作时遇到问题。检查下面的代码示例。下面的代码执行时没有编译错误但最初我在下面的代码中用while代替for循环。这就是向元素抛出未解决的引用错误 为什么我们在科特林有如此奇怪和意外的行为。刚从科特林开始请原谅 fun main(args: Array<String>) { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ val myarr=intArrayO

刚在与kotlin合作时遇到问题。检查下面的代码示例。下面的代码执行时没有编译错误但最初我在下面的代码中用while代替for循环。这就是向元素抛出未解决的引用错误

为什么我们在科特林有如此奇怪和意外的行为。刚从科特林开始请原谅

fun main(args: Array<String>) {
  /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  val myarr=intArrayOf(1,2,3,4)

  for(element in myarr){
      println(element)
  }
fun main(args:Array){
/*在此处输入代码。从标准输入读取输入。将输出打印到标准输出*/
val myarr=intArrayOf(1,2,3,4)
for(myarr中的元素){
println(元素)
}
} 下面是我遇到错误的代码。我的问题是为什么它在for循环中工作而不是在while中工作

fun main(args: Array<String>) {
  /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  val myarr=intArrayOf(1,2,3,4)

  while(element in myarr){
      println(element)
  }
fun main(args:Array){
/*在此处输入代码。从标准输入读取输入。将输出打印到标准输出*/
val myarr=intArrayOf(1,2,3,4)
while(myarr中的元素){
println(元素)
}

}在while循环中使用
是不好的。但是,您可以执行以下操作:

fun main(args: Array<String>) {
    var i = 0
    val myarr=intArrayOf(1,2,3,4)
    while (i < myarr.size)
        println(myarr[i++])
}
fun main(args:Array){
变量i=0
val myarr=intArrayOf(1,2,3,4)
而(i
参考:
循环需要布尔参数<在
中的code>不是迭代器在本例中,它相当于中的布尔检查。例如:

fun demo(){
    val x = 2;
    val l = listOf(1, 2, 3);
    while(x in l){

    }
}
请注意,这是一个可怕的代码,它将导致无限循环。但它确实向你表明了这一点;在while循环中,中的
表示布尔值,而不是范围。这也适用于阵列

它是未解析引用的原因是您正在执行布尔检查,而不是for循环。对于循环,自动声明字段,其中作为
while
,但如果
需要现有字段(即
val x=something
)或直接声明(即
while(2 in l)
)。后者删除变量名

因此,
循环不会像
那样为
使用iterables。您有五个迭代iterable的选项:

  • for(i在0中直到list.size)
    -
    list.size
    可以是任何调用,只要它是int
  • for(列表中的项目)
    -这要求列表是一个可编辑的
  • 您必须在
  • 代码时显示
    。您是否定义过
    元素
    ?除非您发布while循环以查看不同之处或可能导致问题,否则我们无法提供帮助,
    while
    循环不支持
    in
    语法。要实现所需的功能,请使用
    for
    循环。@Carcigenicate元素在上面的for循环代码中没有定义,但它起了作用,为什么不在编写
    for(element…
    时在
    for
    中定义它呢。
    var i = 0;
    while(i < list.size) {
        // remember to increment `i`, otherwise it's an infinite loop
    }
    
    fun main(args: Array<String>) {
      val myarr=intArrayOf(1,2,3,4)
      var element = 0; //if this is in the list, the the while loop is an infinite loop.
      while(element in myarr){
          println(element)
      }
    
    }