Blue Pelican Java でこのプロジェクトを 1 時間以上試してみましたが、うまくいかない理由がよくわかりません。基本的に私がしなければならないことは、通常の数を 2 進数に変換することです。1 はスイッチが開いていることを意味し、0 はスイッチが閉じていることを意味し、2 進数の各桁を調べて、開いているか閉じているかを出力します。彼らは私にこれをしてほしいと述べました:
「左から 3 番目のビットを調べたいとします。3 番目のビットのみを調べるには、以下に示すようにマスクを使用して、元の数値とビットごとに AND します。1 0 1 1 0 0 0 1bin = 177dec 0 0 1 0 0 0 0 0bin = 32dec (これはマスクです)
0 0 1 0 0 0 0 0bin = 32dec = (177 & 32)
32 のマスク値 (左から 3 番目のビット位置の位置値は 25 であるため 25) をビットごとに AND 演算するこのスキームは、元の数値の 3 番目のビット位置と正確に等しい 3 番目のビット位置の値を生成することに注意してください。 . 他のすべてのビット位置は 0 であることが保証されています。したがって、このビットごとの AND 演算の結果をテストして、その値全体が 0 かどうかを確認できます。0 より大きい場合、これは、テストされた位置のビットが 1 だったことを意味します。」
この時点で、Switches.in フォルダー内の最初の数字 22 をテストしているだけで、フォルダー全体をコード用にまだインポートしていません。コードがコンパイルされ、必要なものの出力が開始されますが、突然切断され、次のようなエラー メッセージが表示されます。
Switch sw57is "off
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
at Tester.main(Tester.java:32)
これが私のコードです:
import java.io.*;
import java.util.*;
import java.text.*;
public class Tester
{
public static void main(String args[])
{
int j=22;
String jj=Integer.toBinaryString(j);
StringTokenizer sc=new StringTokenizer(jj,"");
int l=(sc.countTokens());
int a[]=new int[l];
int xx=0;
for(int x=l; x>-1; x--)
{
xx=xx++;
double p=(Math.pow(2,xx));
int pp=(int)p;
int n=((j)&(pp));
String nn=Integer.toBinaryString(n);
StringTokenizer nnn=new StringTokenizer(nn);
int po=(nnn.countTokens());
int sum=0;
System.out.println(nnn);
for(int xxx=-1; xxx<po; xxx++)
{
sum=sum+(Integer.parseInt(nnn.nextToken()));
if(sum>0)
{
System.out.println("Switch sw"+(x+56)+"is \"on");
}
else if(sum==0)
{
System.out.println("Switch sw"+(x+56)+"is \"off");
}
}
}
}
}
コードの何が問題なのかわかりません。アドバイスをいただければ幸いです。ありがとう、そして長い投稿でごめんなさい!