课堂动手动脑

1、编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。

源代码:

 1 package tutorial;
 2 import javax.swing.JOptionPane;
 3 
 4 public class Option2 {
 5 
 6 
 7     public static void main(String[] args) {
 8         String firstNumber,secondNumber,result;
 9         
10         int number1,number2;
11         
12         firstNumber = JOptionPane.showInputDialog("The first number :");
13         
14         secondNumber = JOptionPane.showInputDialog("The second number :");
15         
16         number1 = Integer.parseInt(firstNumber);
17         
18         number2 = Integer.parseInt(secondNumber);
19         
20         result = number1 + " + " + number2 + " = " + (number1 + number2) + "\n" + number1 + " - " + number2 + " = " + (number1 - number2) + "\n" + number1 + " * " + number2 + " = "  + (number1 * number2) + "\n" + number1 + "/" + number2 + " = " + (number1 / number2);
21     
22         JOptionPane.showConfirmDialog(null, result,"Results",JOptionPane.PLAIN_MESSAGE);
23     }
24 
25 }

 

运行结果截图:

 

 

 

 

 

2、枚举类型练习

得到的结论:枚举不属于原始数据类型,枚举类型中每个元素都是不同的对象,在程序中不同的地方引用的该枚举类型的同一个值时是同一个对象

 

3、计算机中数字的编码方式

计算机中的数字是以二进制方式存储的,第一个二进制位为符号位,0代表正数,1代表负数

原码、反码、补码是计算机中存储数字使用的编码

(1)、原码、反码、补码的概念

原码:符号位加上这个数绝对值    

  例如正整数1的8位二进制原码为 00000001      负整数-1的8为二进制原码为 10000001    

反码:正数的反码就是其本身,负数的反码就是在原码的基础上除符号位外所有的位取反

  例如正整数1的8位二进制原码为 00000001  则其反码还为 00000001      

    负整数-1的8为二进制原码为 10000001  其反码为 11111110

补码:正数的补码是其本身,负数的补码为其反码再加1

  例如正整数1的8位二进制原码为 00000001  则其补码还为 00000001      

    负整数-1的8为二进制原码为 10000001  其反码为 11111110  其补码为   11111110 + 00000001 = 11111111

(2)、Java语言中的数字是以补码方式存储的

验证如下:

 

由负整数10无符号右移一位得正2147483643可知Java中数字的存储方式为补码

分析:

如果存储方式为原码 则-10 存储的二进制表示为   10000000 00000000 00000000 00001010  无符号右移一位 得   01000000 00000000 00000000 00000101   此数十进制为 1073741829

如果存储方式为反码 则-10 存储的二进制表示为   11111111 11111111 11111111 11110101  无符号右移一位 得   01111111 11111111 11111111 11111010  此数十进制为 2147483642

如果存储方式为补码 则-10 存储的二进制表示为   11111111 11111111 11111111 11110110  无符号右移一位 得   01111111 11111111 11111111 11111011  此数十进制为 2147483643

Java中负整数10无符号右移一位得正2147483643与存储方式为补码分析出来的结果相同

所以Java中数字存储方式为补码。

 

 

4、同名变量屏蔽原则:

Java中变量遵循同名变量屏蔽原则,即如果局部定义的某个变量与全局某个变量重名时,将屏蔽全局的同名变量,引用该变量名是引用的为局部的变量

实例检验:

分析:局部变量a与全局变量a重名,当输出变量a的值时输出的为局部的变量a的值

 

5、Java中的类型转换:

实线为无精度损失,虚线为有精度损失

如果转换后的数据类型占的位数或其可表示的数值范围 大于 原始数据类型的位数或其可表示的数值范围 则转换过程 无 精度损失

如果转换后的数据类型占的位数或其可表示的数值范围 小于 原始数据类型的位数或其可表示的数值范围 则转换过程 有 精度损失

 

6、double类型存储不准确

浮点数在计算机中的存储方式:

符号位+指数位+尾数位

float:占4个字节 32位    则    存储方式为    符号位占1位(为31位)   指数位占8位(30-23位) 尾数位占23位(22-00位)

double:占8个字节 64位  则   存储方式为  符号位占1位(63位)  指数为占11位(62-52位)  尾数位占52位(51-00位)

浮点数在计算机中都以其二进制的科学计数法方式存储

例如 10.3  

整数部分为10   二进制表示为   1010

小数部分0.3(小数部分取二进制,乘2取整数部分,将乘2后的结果减去取出来的整数部分再乘2,一次循环,直到将乘2后的结果减去取出来的整数部分得0,依次将取出的整数部分排列即为其二进制表示方式)

0.3 * 2 = 0.6 (整数部分0)

(0.6 - 0) * 2 = 1.2 (整数部分1)

(1.2 - 1) * 2 = 0.4 (整数部分0)

(0.4 - 0) * 2 = 0.8 (整数部分0)

(0.8 - 0) * 2 = 1.6 (整数部分1)

(1.6 - 1) * 2 = 1.2(整数部分1)开始循环

所以0.3的二进制表示方式为0.010010100101001(按照01001循环)

所以10.3的二进制表示为:1010.010010100101001......

其科学计数法表示方式为:1.010010010100101001...E100     (指数为3 二进制表示为100   所以为E100)

用float类型在计算机中存储方式为:

符号位:0表示正数,1表示负数

指数位:100   在float中指数位要加上十进制的127   即二进制的 01111111

  所以指数位为     00000100 + 01111111 =    10000010     所以符号位为:10000010

尾数位:为科学计数法小数点后面的部分   0100100101001...(填满23位,如果后面不是循环的用0补全)

 

用double类型在计算机中存储方式为:

符号位:0表示正数,1表示负数

指数位:100   在float中指数位要加上十进制的1023   即二进制的 01111111111

  所以指数位为     00000000100 + 01111111111 =    10000000010     所以符号位为:10000000010

尾数位:为科学计数法小数点后面的部分   0100100101001...(填满52位,如果后面不是循环的用0补全)

由于浮点型数据的存储方式所以会造成数据不精确

 

 7、输出每个变量的值和变量的和

看下面的例子:

在默认情况下,编译器会把'+'当做运算符,所以第二个输出语句X+Y的输出结果为这两个变量的和300

当前面有字符串后再加'+',编译器就会把'+'当做字符串连接符,所以第一个输出语句X+Y中'+'起连接作用,所以会依次输出这两个变量的值。

 

8、生成随机验证码

源代码:

 1 package tutorial;
 2 
 3 public class RandStr {
 4 
 5     public static void main(String[] args) {
 6         String result = "";
 7         //循环生成6个字母
 8         for(int i = 0;i < 6;i++){
 9             int val = (int)(Math.random() * 26 + 97);//随机生成一个97-122的整数
10             result += (char)val;//将此整数转换为字符并连接到字符串变量result上
11         }
12         //输出结果
13         System.out.println(result);
14 
15     }
16 
17 }

运行如果截图:

 

 

posted @ 2016-10-07 10:59  liuxining  阅读(195)  评论(0编辑  收藏  举报