2014-01-10 81 views
0

这里是我的Python代码返回数组的java元素

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

这里是我的Java代码调用string方法:

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];    
    } 
} 

如果我正确理解它应该返回序列数据中的下一个项目,只要seque nce结束 - 将你带到开始等等无限。

+2

我不知道你问什么。这里有很多代码没有上下文或描述 – Cruncher

+0

_lengthText_从哪里来? –

+0

'产量数据[n]的'在pyton是不一样的'返回[I];'在Java –

回答

0

有在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 returnyield之间的差异,你尝试把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 
} 

其中data1data2都是byte[]类型。如果他们的长度保证相等,你可以跳过Math.min的事情。

+0

所有我需要的是获得阵列的每个元素,并应用XOR操作他们。并在此操作后创建新的阵列。但新阵应该是具体尺寸(lengthText),我的意思是,如果数组,这是我们运用XOR是到底应该返回的第一个元素,并继续操作,而新的数组将是“lengthText”的大小。我很抱歉,我无法解释清楚,但我是初学者。 – Saba

+0

看看我的编辑,并说如果这就是你想要做的。 –

+0

不完全(但我的代码开始正常工作:))))也许它不好,但现在它工作。我试图让它变得更好。感谢您的时间和帮助。 – Saba