zoukankan      html  css  js  c++  java
  • 第二周Java课堂作业

    演示一:

     1 public class EnumTest {
     2     public static void main(String[] args) {
     3         Size s=Size.SMALL;
     4         Size t=Size.LARGE;
     5         //s和t引用同一个对象?
     6         System.out.println(s==t);  
     7         //是原始数据类型吗?
     8         System.out.println(s.getClass().isPrimitive());//getClass()返回对象时的运行类  
     9         //class .isPrimitive()确定指定的Class对象表示一个基本类型(此方法返回true,当且仅当这个类表示一个基本类型。)
    10         //从字符串中转换
    11         Size u=Size.valueOf("SMALL");
    12         System.out.println(s==u);  //true
    13         //列出它的所有值
    14         for(Size value:Size.values()){
    15             System.out.println(value);
    16         }
    17     }
    18 }
    19  enum Size{SMALL,MEDIUM,LARGE};

    结果与分析:

     Size枚举类型定义的s,t对象引用的是Size里不同的元素,故不为同一对象,故第一个输出为false。

    第二个判断对象s的所属类类型是否是一般类型,得到false输出,所以s所属的类并不是一般类型。

    然后定义对象u引用SMALL,与s引用同一元素,故为同一对象。

    然后循环打印Size里的元素,即得到输出结果。

    结论:

    枚举类型是一种特殊的类。

    枚举类型是引用类型。

    枚举类型可用于switch语句中。

    枚举类型中实例化不同元素的对象不是同一对象,枚举不属于原始数据类型,他的每个具体值都引用一个特定的对象,相同的值则引用相同的对象。

    使用枚举可以很方便的定义常量。

    从字符串中转化的枚举类型可以与原枚举类型进行比较,且可以地址相同。可以使用“==”和“equal()”方法直接对比枚举常量的值。 

    演示二:

    实现两数相加,用两个文本框输入数据,一个文本框输出。

     1 // An addition program 
     2 import javax.swing.JOptionPane;  // import class JOptionPane
     3 public class Addition {
     4    public static void main( String args[] )
     5    {
     6       String firstNumber,   // first string entered by user
     7              secondNumber;  // second string entered by user
     8       int number1,          // first number to add
     9           number2,          // second number to add
    10           sum;              // sum of number1 and number2
    11 
    12       // read in first number from user as a string
    13       firstNumber =
    14          JOptionPane.showInputDialog( "Enter first integer" );
    15 
    16       // read in second number from user as a string
    17       secondNumber =
    18          JOptionPane.showInputDialog( "Enter second integer" );
    19 
    20       // convert numbers from type String to type int
    21       number1 = Integer.parseInt( firstNumber ); 
    22       number2 = Integer.parseInt( secondNumber );
    23 
    24       // add the numbers
    25       sum = number1 + number2;
    26 
    27       // display the results
    28       JOptionPane.showMessageDialog(
    29          null, "The sum is " + sum, "Results",
    30          JOptionPane.PLAIN_MESSAGE );
    31 
    32       System.exit( 0 );   // terminate the program
    33    }
    34 }

    运行结果:

    演示三:

    验证如下代码的输出结果。

     1 import java.util.*;
     2 
     3 public class InputTest
     4 {  
     5    public static void main(String[] args)
     6    {  
     7       Scanner in = new Scanner(System.in);
     8 
     9       // get first input
    10       System.out.print("What is your name? ");
    11       String name = in.nextLine();
    12 
    13       // get second input
    14       System.out.print("How old are you? ");
    15       int age = in.nextInt();
    16       
    17      int i,j;
    18      String value="100";
    19      i=Integer.parseInt(value);//Integer.parseInt()return a int value
    20      j=200;
    21      String s=String.valueOf(j);//String.valueOf() return a String object
    22      
    23       // display output on console
    24       System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1));
    25       System.out.println("i="+i+",s="+s);
    26   
    27       
    28    }
    29 }

    运行结果:

    演示四:

    验证精度不准。

    1 public class TestDouble {
    2 
    3     public static void main(String args[]) {
    4         System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
    5         System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
    6         System.out.println("4.015 * 100 = " + (4.015 * 100));
    7         System.out.println("123.3 / 100 = " + (123.3 / 100));
    8     }
    9 }

    运行结果:

    结论:使用double类型的数值进行计算,结果是不准确的。

    归根结底,这个问题涉及到二进制与十进制的转换。而N进制可以理解为:数值×基数的幂。Double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

    所以几乎都会存在误差。

    演示五:

    精度不准的处理方法。

     1 import java.math.BigDecimal;
     2 
     3 public class TestBigDecimal
     4 {
     5     public static void main(String[] args) 
     6     {
     7         BigDecimal f1 = new BigDecimal("0.05");
     8         BigDecimal f2 = BigDecimal.valueOf(0.01);
     9         BigDecimal f3 = new BigDecimal(0.05);
    10         System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
    11         System.out.println("0.05 + 0.01 = " + f1.add(f2));
    12         System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
    13         System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
    14         System.out.println("0.05 / 0.01 = " + f1.divide(f2));
    15         System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
    16         System.out.println("0.05 + 0.01 = " + f3.add(f2));
    17         System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
    18         System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
    19         System.out.println("0.05 / 0.01 = " + f3.divide(f2));
    20     }
    21 }

    运行结果:

    结论:

    在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。

    演示六:

    字符串连接

    1 public class Test {
    2     public static void main(String[] args) {
    3         int X=100;
    4         int Y=200;
    5         System.out.println("X+Y="+X+Y);
    6         System.out.println(X+Y+"=X+Y");
    7     }
    8 }

    运行结果:

    分析原因:

    1、在第一个输出语句中,第一个遇到的是字符串,所以后面的X,Y也转换成字符串输出。此时“+”被理解为连接符。

    2、而第二个语句中,第一个遇到的X与第二个遇到的Y是int型,而第三个是字符串,所以连接输出了运算结果和字符串。此时“+”则被理解为运算符。

    演示七:

    每个数据类型所占的位数和取值范围:

    ①byte(字节):8bits,数值范围为-128-127

    ②short(短整型):16bits,数值范围为-32768-32768

    ③int(整型):32bits,数值范围为-2147483648-2147483648

    ④long(长整型):64bits,数值范围为-9233372036854477808-9233372036854477808

    ⑤float(浮点型):32bits,数值范围为-3.40292347E+38-3.40292347E+38

    ⑥double(双精度):64bits,数值范围为-1.7976931486231570E+308-1.7976931486231570E+308

    ⑦char(字符型):16bits,数值范围为‘u0000-uffff’

    ⑧boolean(布尔型):1bits,数值范围为true/false

    结论:

    java中的基本数据类型转换分为自动类型转换和强制类型转换。自动数据类型转换是由优先级别低的数据赋值给优先级别高的变量。强制类型转换是由优先级别高的数据赋值给优先级别低的变量。强制类型转换通常都会有存在精度的损失,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,精度损失则很容易发生。

    演示八:

    使用类型转换生成六位验证字符串,示例程序每次运行时,都会生成不同的字符串。

     1 public class RandomStr
     2 {
     3     public static void main(String[] args) 
     4     {
     5         //定义一个空字符串
     6         String result = "";
     7         //进行6次循环
     8         for(int i = 0 ; i < 6 ; i ++)
     9         {
    10             //生成一个97~122的int型的整数
    11             int intVal = (int)(Math.random() * 26 + 97);
    12             //将intValue强制转换为char后连接到result后面
    13             System.out.println(intVal+"--"+(char)intVal);
    14             result = result + (char)intVal;
    15         }
    16         //输出随机字符串
    17         System.out.println(result);
    18      }
    19 }

    运行结果:

        

  • 相关阅读:
    N层电梯只停一层情况下,求所有人爬楼层数最少
    小组开发用户调研
    《哈利波特》买书最优惠算法
    团队开发——极速蜗牛
    林锐——软件工程思想后两章阅读笔记
    课堂练习之检测水军
    团队开发项目-----来用------典型用户与用户场景分析
    体验结对开发的乐趣(6)--(电梯调度问题)
    团队开发项目-----来用------用户需求调研报告
    课堂练习之最高折扣,最低优惠规划
  • 原文地址:https://www.cnblogs.com/dongao/p/11551599.html
Copyright © 2011-2022 走看看