第二周Java课堂作业
2019-09-23 09:06:23来源:博客园 阅读 ()
第二周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-u\ffff’
⑧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 }
运行结果:
原文链接:https://www.cnblogs.com/dongao/p/11551599.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash