zoukankan      html  css  js  c++  java
  • java 作业02

    消息框在可视化编程里很常见,也很普通,下面我们来讨论用户在消息框中输入数字进行运算后,在消息框中输出结果。

    一 思路

    1 引入类提示框 JOptionPane。

    2 定义用户输入的第一个数,第二个数,和选择的符号。

    3 定义计算机读入的第一个数第二个数和用户选择的运算符。

    4 第一、二、三个消息框为输入型,用户输入第一个第二个数,并选择要进行的运算。

    5 switch选择结构,进行相应的运算并输出结果。但是进行除法运算时,要判断是否为零,为零输出错误提示,这个跟输出结果的那个消息框不同

    6 程序结束。

    二 流程图

    三 源代码

    //加减乘除

    import javax.swing.JOptionPane; // 引入类 JOptionPane

    public class YunSuan {
    public static void main( String args[] )
    {
    String firstNumber, // 用户输入的第一个数
    secondNumber, // 用户输入的第一个数
    fuhao ; //运算符号

    int number1, // 运算的第一个数
    number2, // 运算的第二个数
    sum, // 和差商积
    cha,
    ji,
    shang,
    character; //选择的运算符
    // 读入第一个数
    firstNumber =
    JOptionPane.showInputDialog( "Enter first integer" );

    // 读入第二个数
    secondNumber =
    JOptionPane.showInputDialog( "Enter second integer" );

    fuhao=
    JOptionPane.showInputDialog( "1:+,2:-,3:*,4:/.Choose the operational character" ); //选择运算符


    number1 = Integer.parseInt( firstNumber ); //类型转换
    number2 = Integer.parseInt( secondNumber );
    character=Integer.parseInt( fuhao );
    switch(character){

    case 1:{

    sum = number1 + number2;

    //输出结果
    JOptionPane.showMessageDialog(
    null, "The sum is " + sum, "Results",
    JOptionPane.PLAIN_MESSAGE );break;}
    case 2:{ //减法

    cha = number1 - number2;


    JOptionPane.showMessageDialog(
    null, "The is " + cha, "Results",
    JOptionPane.PLAIN_MESSAGE );break;}

    case 3:{

    ji = number1 * number2;

    //乘法
    JOptionPane.showMessageDialog(
    null, "The ji is " + ji, "Results",
    JOptionPane.PLAIN_MESSAGE );break;}

    case 4:{
    if(number2==0) { //除法 先判断除数是否为0;为0输出错误,用户点击确定;不为0就输出结果


    JOptionPane.showMessageDialog(null, "error", "提示",JOptionPane.WARNING_MESSAGE);
    break;}

    else{

    shang = number1 / number2;


    JOptionPane.showMessageDialog(
    null, "The shang is " + shang, "Results",
    JOptionPane.PLAIN_MESSAGE );break;}
    }
    }
    System.exit( 0 ); // 程序结束
    }
    }

    四 程序截图

    加法

    减法

    乘法

     除法

     

     

    除法特例

    思考问题一

    public class EnumTest {

    public static void main(String[] args) {
    Size s=Size.SMALL;
    Size t=Size.LARGE;
    //s和t引用同一个对象?
    System.out.println(s==t); //
    //是原始数据类型吗?
    System.out.println(s.getClass().isPrimitive());
    //从字符串中转换
    Size u=Size.valueOf("SMALL");
    System.out.println(s==u); //true
    //列出它的所有值
    for(Size value:Size.values()){
    System.out.println(value);
    }
    }

    }
    enum Size{SMALL,MEDIUM,LARGE};

    1 仔细阅读示例,分析运行结果

     

    枚举类型的每个具体值都引用一个特定的对象,相同值引用同一个对象。因为s和t是不同内容所以引用不同对象。

    枚举类型不是原始数据类型,是引用型。可以字符转换,定义变量名进行遍历

    2 得到的结论及枚举类型的基本用法

    枚举是引用型变量,枚举类型关键字是enum,类型名自己根据需要定义。枚举前边可以有private类私有的,也可以是public 全局的,可以通过定义变量名来遍历。valueOf() 类型转换,将后边的类型转换成前边的类型。可以在类中定义,也可以在类外定义。

    1)定义

    enum 类型名 {内容1,内容2,.....内容n};

    2)引用

    类型名 变量名=类型名.内容

    3)遍历

    for( 类型名 变量名:类型名.values()){

    System.out.println(变量名);
    }

     思考问题 2

    1 原码、反码、补码

    1)原码反码补码是相对于整数来说,都是8位二进制表示一个数。

     2)原码 

     最高位为符号位;正数最高位为0,负数为1.

    范围 -127~+127

    例 +11的原码是00001011,-11原码是10001011.

    3)反码

    正数的反码与其原码相同;负数的反码是对其原码逐位取反,但是符号位不变。

    范围

    -127~+127

    例 +11的反码是00001011,-11的反码是10000100

    4)补码

    正数的补码原码一样;负数的补码是在其反码的末位加一。

    范围-128~+127

    例 +11补码 00001011,-11补码10000101

    2 示例程序

     java 用补码进行运算。补码的+0和-0是一个数,都是00000000

    -0的反码是10000000,补码=11111111+1=(1)00000000最高位溢出

    思考问题3

    同名变量的屏蔽原则:局部变量的名字和全局变量的名字相同,在局部变量的有效范围内,全局变量将失去作用。

    示例程序

    输出 1,没有屏蔽,因为不同名。

     输出2,因为同名,但是在主函数的作用域内,所以2做主。

    思考问题四

    1运行一下程序

    输出结果:

    2 为什么用double类型计算得不到数学上的精确结果?

    无论是单精度还是双精度在存储中都分为三个部分:

    1. 符号位(Sign) : 0代表正,1代表为负
    2. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
    3. 尾数部分(Mantissa):尾数部分

     这个涉及到二进制与十进制的转换问题。计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。

    N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。
    double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

    举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。
    简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

    3 在构建BigDemical对象时,应使用字符串而不是double数值,否则,仍有可能引发计算精度问题,为什么呢?

     由于浮点数采用二进制系统表示,而二进制无法精确的表示1/10,好比十进制无法精确表示1/3一样。因此,对于很多值浮点数都是采用其能够表示的离目标值近的数来表示,这有可能会在计算中带来不易察觉的误差。为了解决基本数据类型浮点数不能进行精确计算的问题,Java中专门提供了java.math.BigDecimal类,其提供浮点数的精确计算功能。

    思考问题5

    以下代码的输出结果是什么?为什么会有这样的输出结果?

    结果:

    因为第一个输出 “x+y=” 是以字符形式输出的,字符和任何数据类型相加都是相连接,形成一个更大的字符串。“x+y=”先和x连接为“x+y=100”再和y连接为x+y=100200.

    第二个x和y先做加法运算,再输出300=x+y。

  • 相关阅读:
    2019年11月4日随堂测试 最多输入字母统计
    写增删改查中间遇到的问题
    2019年12月9日下午自习成果
    2019年12月16日 分级考试
    2019年11月18日 JAVA期中考试 增删改查
    sql语言积累
    【转载】Java项目中常用的异常处理情况总结
    泛型
    C#数字格式化输出
    委托,Lambda的几种用法
  • 原文地址:https://www.cnblogs.com/jingxiaopu/p/5920590.html
Copyright © 2011-2022 走看看