创建一个从用户获取输入的java程序,它必须是'byte'类型并且在区间[0,8]中。 我正在使用一种方法来首先检查输入是否是一个字节,然后如果那是真的检查该字节是否适合该间隔,然后将该值返回到我的main方法。
public static byte GetShiftedLeft(){
byte l = GetByte(SHIFT_L_MSG);
while (l < 0 || l > 8){
System.out.println(l + " is not between the range");
l = GetByte(SHIFT_L_MSG);
}
return l;
}
public static byte GetShiftedRight(){
byte r = GetByte(SHIFT_R_MSG);
while (r < 0 || r > 8){
System.out.println(r + " is not between the range");
r = GetByte(SHIFT_R_MSG);
}
return r;
}
public static byte GetByte(String prompt){
System.out.print(prompt);
Scanner stdin = new Scanner(System.in);
while (!stdin.hasNextByte()){
System.out.println("*** "+stdin.next() + " is not a byte ***");
System.out.print("Try again\n"+prompt);
stdin.next();
}
return stdin.nextByte();
}
当我运行程序来检查它时,如果第一个输入不是一个字节,但是下一个输入是一个字节但不适合该间隔,则不显示该消息并且扫描器处于空闲状态。 / p>
输出运行:
enter #left-shift bits in the interval [0,8]: 145
*** 145 is not a byte ***
Try again
enter #left-shift bits in the interval [0,8]: 12
4
enter #right-shift bits in the interval [0,8]: 12
12 is not between the range
enter #right-shift bits in the interval [0,8]: 11
11 is not between the range
enter #right-shift bits in the interval [0,8]: 10
10 is not between the range
enter #right-shift bits in the interval [0,8]: 789
*** 789 is not a byte ***
Try again
enter #right-shift bits in the interval [0,8]: 12
然后它就站在那里......作为第5行和第5行。 6从输出
答案 0 :(得分:0)
你有两次stdin.next(),所以当输入789时,它需要另一个输入,然后是另一个输入。
答案 1 :(得分:0)
一个字节,根据Oracle文档:
是一个8位带符号的二进制补码整数。它的最小值为-128,最大值为127(含)
因此,如果要检查值是否为字节,则可以使用Scanner.nextInt()。
public boolean isByte(int n)
{
if(n >= 128 && n <= 127)
{
return true;
}
return false;
}
public byte getByte()
{
Scanner scan = new Scanner(System.in);
System.out.print("Enter a byte here: ");
int nextInt = scan.nextInt();
System.out.println();
if(isByte(nextInt))
{
byte b = (byte) nextInt;
if(b > 0 && b < 8)
{
System.out.println("Got byte "+b);
return b;
}
else
{
System.out.println("Not in range [0,8]!! Try again!!");
return getByte();
}
}
else
{
System.out.println("Not a byte!! Try again!!");
return getByte();
}
}
然后,如果我正确理解你的问题,你试图将该字节向左或向右移位给定的数字n。 Java有一些位移操作符,可以在一行中实现这一点。
byte b = 105;
b << n; //bit shift n to the left
b >> n; //bit shift n to the right