键盘输入字符、数字,并判断数是否是2的阶次方数
1、从键盘输入数
键盘的标砖输入格式:
1 package cn.itcast.keyboard.demo; 2 3 import java.io.*; 4 public class BufferedReaderDemo02 { 5 public static void main(String[] args) { 6 BufferedReader buf = null; 7 //从键盘输入一行字符,保存到字符串str中 8 buf = new BufferedReader(new InputStreamReader(System.in)); 9 String str = null; 10 System.out.println("请输入内容:"); 11 try{ 12 str = buf.readLine(); //读取一行,只返回回车符之前的数据内容 13 }catch(IOException e){ 14 e.printStackTrace(); 15 } 16 System.out.println("输入内容为:"+str); 17 } 18 }
此段程序得到的是字符串
2、要求输入的是数字:
在Java中,没有像C语言那样有一个专供接受键盘输入值的scanf函数,所以一般的做法是从键盘输入一行字符,保存到字符串s中,再将字符组成的字符串s转换为整型数据后返回
1 package cn.itcast.keyboard.demo; 2 3 import java.io.*; 4 5 public class PrintResult { 6 public static void main(String[] args) { 7 Result result=new Result(); 8 System.out.println("请输入一个整数:"); 9 int a=InputData.getInt(); 10 result.print(a); 11 } 12 } 13 class InputData{//定义从键盘输入数据的类 14 static private String s=""; 15 static public void input(){//从键盘输入一行字符,保存到字符串s中 16 BufferedReader bu=new BufferedReader(new InputStreamReader(System.in)); 17 try{ 18 s=bu.readLine();//读取一行,只返回回车符之前的数据内容 19 } 20 catch(Exception e){} 21 22 } 23 24 static public int getInt(){//静态方法可直接用类名调用 25 input(); 26 return Integer.parseInt(s);//将字符组成的字符串s转换为整型数据后返回 27 } 28 } 29 class Result{ 30 void print(int d){ 31 System.out.println(d+"的平方:"+d*d); 32 System.out.println(d+"的立方:"+d*d*d); 33 } 34 }
3、判断一个数是否是2的阶次方数
如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面若干个0,。比如8就是1000,64就是1000000。如果将这个数减1后,再与该数做和(&)运算,则应该全为0(如,8与7,8的二进制数1000,7的二进制数111,它们做和运算即8&7==0的,所以推出,((d-1)&(d))==0)
只需要将上述程序中的Result类改为:
1 class Result{ 2 void print(int d){ 3 System.out.println(d+"的平方:"+d*d); 4 System.out.println(d+"的立方:"+d*d*d); 5 if(((d-1)&d)==0&&(d!=0)) 6 System.out.println("是2的阶次"); 7 else 8 System.out.println("不是2的阶次"); 9 } 10 }