我已经在 Blue Pelican Java 中尝试了这个项目一个多小时,但我不太确定它为什么不起作用。基本上我要做的就是把一个普通的数字变成一个二进制数,假设 1 表示开关打开,0 表示它关闭,遍历二进制数中的每个数字并打印它是打开还是关闭。他们说明了他们希望我如何做到这一点:
“假设我们希望查看左起第三位。使用如下所示的掩码与原始数字按位与,以便仅查看第三位。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 进行按位与运算的方案(25,因为左起第三位位置的位置值为 25)在第三位位置产生的值与原始数字的第三位位置完全相同. 所有其他位的位置都保证为 0。因此,可以测试这个按位与运算的结果,看它的整个值是否为 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");
}
}
}
}
}
我不确定代码有什么问题。任何建议将不胜感激。谢谢,很抱歉这篇冗长的帖子!