Java - 扫描仪闲置

时间:2017-02-20 20:51:08

标签: java java.util.scanner

创建一个从用户获取输入的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从输出

2 个答案:

答案 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