我一直在Blue Pelican Java中尝试这个项目超过一个小时,我不确定它为什么不起作用。基本上我需要做的是将常规数字转换为二进制数字,假设1表示开关打开,0表示关闭,则检查二进制数字中的每个数字,并打印它是打开还是关闭。他们表示,他们要我怎么做:Blue Pelican Java项目“掩蔽遥测数据”;编译但不运行?
“假设我们不妨先看看从左边第三位使用下面所示的掩模作为 来位与,以 原号只能看在第三位。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)
注意这种按位AND与屏蔽值32(25,因为 第三位位置左边的位置值为25) 会在第三个位的位置产生一个精确等于原始数的第三个位的位置。所有其他位的位置是 保证为0。因此,逐位AND-ING的这个结果可能是 测试,以查看是否整个值为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");
}
}
}
}
}
我不确定代码有什么问题。任何建议将不胜感激。谢谢,并为冗长的帖子感到抱歉!
那么测试用例的预期完整输出是什么? – david 2012-08-14 00:48:04