Kotlin的“ while”控制流中有错误

时间:2018-08-30 06:02:33

标签: android while-loop kotlin

我在 JAVA 中具有以下代码:

            byte[] data = new byte[1024];
            int count;
            int total = 0;

            while ((count = input.read( data )) != -1) {
                output.write( data, 0, count );
                total += count;
                publishProgress((int) (total * 100 / sizeFichero));

            }

我正在将我的应用更新为Kotlin,但是在WHILE中,我出现了错误。

在这段代码中,出现以下错误:

  

赋值不是表达式,并且只允许使用表达式   这种情况

            val data = ByteArray(1024)
            var count: Int?
            var total = 0
            while ((count = input.read(data)) != -1) {
                output.write( data, 0, count!! )
                total += count!!
                publishProgress((int) (total * 100 / sizeFichero));

            }

任何消除错误的建议。

2 个答案:

答案 0 :(得分:4)

在Kotlin赋值中,例如count = input.read(data)) != -不能用作表达式,即count = xy不返回布尔值,因此不能由while求值。

您可以这样更改代码:

var count = input.read(data)
while (count != -1) {
    output.write( data, 0, count!! )
    //...
    count = input.read(data)
}

还请注意,Kotlin提供了用于复制流的复杂方法:

val s: InputStream = FileInputStream("file.txt")
s.copyTo(System.out)

答案 1 :(得分:1)

这是解决您的问题的方法:

val data = ByteArray(1024)
            var count: Int?
            var total = 0
            while ({count = input.read(data);count }() != -1) {
                output.write( data, 0, count!! )
                total += count!!
                publishProgress((int) (total * 100 / sizeFichero));

            }

有关更多详细信息,请阅读以下讨论:

https://discuss.kotlinlang.org/t/assignment-not-allow-in-while-expression/339/6