我在 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));
}
任何消除错误的建议。
答案 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