返回数组j的元素

2024-03-29 11:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的Python代码

def string(data):
    n=0
    while True:
        yield data[n]
        n+=1
        n%=len(data)

下面是我调用string方法的Java代码:

for(int i = 0; i < lengthText; i++) {
              out[i] += string(t1) ^ string(t2);

         }

以及string方法:

public byte string(byte[] a){
    int i = -1;
     while(true){
        i++;
        i%= a.length;
        return a[i];            
     }
}

如果我理解正确,它应该返回序列数据中的下一项,一旦序列结束-带你到开始,依此类推到无穷大。你知道吗


Tags: 方法代码truefordatastringlendef
1条回答
网友
1楼 · 发布于 2024-03-29 11:23:22

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代码基本上是一个无限循环的集合,这些循环在第一次迭代时就被破坏了。在尝试将yield视为return之前,您应该进一步了解python中returnyield之间的区别。你知道吗

编辑:根据您的描述,您需要:

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
}

其中data1data2都是byte[]类型。如果它们的长度保证相等,你可以跳过Math.min这件事。你知道吗

相关问题 更多 >