- PR -

配列への格納が反映されない?

1
投稿者投稿内容
S.Y
会議室デビュー日: 2004/10/08
投稿数: 8
投稿日時: 2004-10-08 12:48
Java初心者のS.Yと申します。

100回ループを回し、8ビット情報のうち、前回のループに比べてどれかのビットが
1ビット以上on→offになったことを検出するプログラムを作成しています。

16ビットの情報は乱数を用い、ランダムなパターンとしております。


乱数を配列valueへ格納し、前回と今回を比較する方法をとっているのですが、
ループは正常に回っており、「今回ビット」はvalue[x]に格納されているのに、
なぜかvalue[x-1]である「前回ビット」が必ず「0」になります。

コンパイルエラーがでるわけではないので、
このようになってしまう原因がどうしてもわからず、質問いたしました。
どなたか御教示いただけないでしょうか。
なお、使用しているコンパイラはJ2SDK1.4.2です。


以下はそのプログラムです。


/* BitDetection03.java */
import java.util.*;

public class BitDetection03{

public static void main(String args[]){

int x;
int rnd;
Random r = new Random();

for(x=0 ; x<100 ; x++){

rnd = r.nextInt();
byte rnd_s = (byte)rnd;

byte value[];
value = new byte[100];
value[x] = rnd_s;

System.out.println("ランダム数値8ビット出力");
System.out.println(Integer.toBinaryString(0xff & rnd_s));

if(x > 0){
System.out.println("前回ビット、前回ビット反転、今回ビット");
System.out.println(Integer.toBinaryString(value[x-1]));
System.out.println(Integer.toBinaryString(~(value[x-1])));
System.out.println(Integer.toBinaryString(value[x]));
}

if(x == 0){
System.out.println("1回目なので比較対象がありません。");
}
else if( ((0xff & value[x]) | (0xff & ~(value[x-1]))) != 0xff ){
System.out.println("on→offが検出されました。");
}
else{
}

System.out.println("");

}
}
}
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-08 12:52
ループ内でvalue配列を生成しているからです。生成部分をループの前に出してみてください。
S.Y
会議室デビュー日: 2004/10/08
投稿数: 8
投稿日時: 2004-10-08 13:09
ありがとうございます。

ループ内で配列生成すると、1回のループごとに同じ名称の配列が生成され、
その結果デフォルト値の「0」で上書きされてしまうんですね。
1

スキルアップ/キャリアアップ(JOB@IT)