• 课堂动手动脑


    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) + "
    " + number1 + " - " + number2 + " = " + (number1 - number2) + "
    " + number1 + " * " + number2 + " = "  + (number1 * number2) + "
    " + 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 }

    运行如果截图:

  • 相关阅读:
    shell学习(15)- eval及shell No such file or directory解决办法
    30张图带你彻底理解红黑树
    linux中$@,$*,$0,$$,$?参数的含义
    QPS,TPS,吞吐量,响应时间详解及关系
    shell学习(14)- who
    SpringBoot 入门
    创建 Java 项目
    部分 GIT 命令
    Spark Executor Task 的执行和数量
    Ubuntu 18 单机安装 HDP 3
  • 原文地址:https://www.cnblogs.com/liuxining/p/5935217.html
Copyright © 2020-2023  润新知