- - PR -
配列への格納が反映されない?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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(""); } } } |
|
投稿日時: 2004-10-08 12:52
ループ内でvalue配列を生成しているからです。生成部分をループの前に出してみてください。
|
|
投稿日時: 2004-10-08 13:09
ありがとうございます。
ループ内で配列生成すると、1回のループごとに同じ名称の配列が生成され、 その結果デフォルト値の「0」で上書きされてしまうんですね。 |
1