有在Java yield
没有直接的替代品。您可以尝试使用一些小类来模拟它,例如
class YieldSubstitute<Data> {
private int n;
private Data[] data;
public YieldSubstitute(Data[] data) {
this.n = 0;
this.data = data;
}
public Data getNext() {
Data toReturn = data[n];
n = (n + 1) % data.length;
return toReturn;
}
}
,然后使用它像:
YieldSubstitute<Data> ys = new YieldSubstitute<Data>(data);
Data data1 = ys.getNext();
Data data2 = ys.getNext();
...
期间一样,你要记住,yield
是Python的特定元素,首先你需要找到一些共同点使用它在Java中的情况 - 你可以实现仔细分析你的功能实际上在做什么。
在一个侧面说明 - 您的发电机的使用是无效的。你应该带参数首先初始化,然后获得结果的顺序:
generator = string(data)
data1 = next(generator)
data2 = next(generator)
...
Java代码基本上是一个无限循环,即是他们的第一次迭代破碎。你应该了解在python return
的yield
之间的差异,你尝试把yield
,仿佛它是return
之前。
编辑:从你的描述,你需要的是:
byte[] out = new byte[lengthText]; // initialized with 0s
int n = 0;
for (int i = 0; i < lengthText; i++) {
out[i] = data1[n]^data2[n]; // assuming that both arrays have more that 0 elements
n = (n + 1) % Math.min(data1.length, data2.length); // just in case their length differ
}
其中data1
和data2
都是byte[]
类型。如果他们的长度保证相等,你可以跳过Math.min
的事情。
我不知道你问什么。这里有很多代码没有上下文或描述 – Cruncher
_lengthText_从哪里来? –
'产量数据[n]的'在pyton是不一样的'返回[I];'在Java –