2012-02-13 4 views
0

私はJavaを使い慣れていないし、プログラムを書くことを試みている。 ここにコードがある。機能では、カウント= 14、プログラムがスタックしたときに... Plzを私は私が間違っているのか知っている聞かせ減らす..Javaプログラムがスタックする...私はStringオブジェクトを正しく処理していないと思う。

public static class MerkleReducer extends MapReduceBase 
implements Reducer<LongWritable, Text, LongWritable, Text> { 

static String[][] sarray = new String[5][14]; 
    static int count = 0; 

private void MerkleReducer() { 
    for (int i=0;i<5;i++) 
     for (int j=0; j<14;j++) 
      sarray[i][j] += ""; 
} 

public void reduce(LongWritable key, Iterator<Text> values 
    OutputCollector<LongWritable, Text> output, Reporter reporter) throws IOException { 

    count++; 
    Text hashval = new Text(); 
    while (values.hasNext()) { 
      hashval = values.next(); 
    } 
    sarray[0][(int)key.get()] += hashval.toString(); 
    if (count == 14) { 
     for (int i=1; i<5; i++) { 
     for (int j=0; j<7; j = j++) { 
      int k = 2 * j; 
      String hashv= new String(); 
      if ("".equals(sarray[i-1][k])) { 
       break; 
      } 
      if ("".equals(sarray[i-1][k+1])) { 
       sarray[i][j] = sarray[i-1][k]; 
       break; 
      } 
      hashv += sarray[i-1][k] + sarray[i-1][k+1]; 
      sarray[i][j] += hashv; 

     } 
     } 
     output.collect(key, new Text(sarray[3][0])); 

    } else { 
     output.collect(key, new Text(hashval.toString())); 
    } 

} を}

+0

どこが「スタック」しますか? –

答えて

3

j = j++jが変わることはありません意味し、それは意志jの現在の値を取り、jをインクリメントし、古い値をjに戻します。無限大のようなにおいがj = j++

2

for (int j=0; j<7; j = j++) {

+0

Ahh.yes ....それはそんなに愚かな間違いだったとは信じられません...その最も小さな間違いが最も厄介です...私は過去3〜4時間からこれを修正しようとしていました:D ...ありがとう迅速な応答のため...プログラムは正常に動作しています。 :) – Ragit

関連する問題