作业2

EnumTest.java
System.out.println(st);:输出为false。因为s引用的是Size.SMALL,t引用的是Size.LARGE,它们是不同的枚举常量,所以不引用同一个对象。
System.out.println(s.getClass().isPrimitive());:输出为false。枚举类型不是原始数据类型,而是一种引用类型。
System.out.println(s
u);:输出为true。因为通过valueOf方法返回的枚举常量与直接引用的枚举常量是同一个对象。
for(Size value:Size.values()){ System.out.println(value); }:会依次输出SMALL、MEDIUM、LARGE。这是因为values()方法返回了包含所有枚举常量的数组。
枚举类型中的不同枚举常量不引用同一个对象,通过==比较可以区分不同的枚举常量。
枚举类型不是原始数据类型,而是一种引用类型。
可以通过valueOf方法根据字符串名称获取对应的枚举常量,且获取到的枚举常量与直接引用的枚举常量是同一个对象。
可以使用values()方法获取枚举类型的所有枚举常量。
掌握了其基本用法。

Addition.java
当运行这个程序时,会依次出现两个对话框。第一个对话框提示 “Enter first integer”,用户在这个对话框中输入一个整数后点击确定。接着出现第二个对话框提示 “Enter second integer”,用户再次输入一个整数后点击确定。程序会将这两个输入的字符串转换为整数类型,进行加法运算,然后弹出第三个对话框显示 “The sum is [计算得出的和]”,并在对话框标题处显示 “Results”。
这个程序展示了如何使用JOptionPane类来实现简单的图形用户界面交互。通过这种方式,可以方便地从用户获取输入并向用户显示结果,而不需要在命令行中输入和输出。
利用Integer.parseInt()方法可以将字符串类型的数字转换为整数类型,从而进行数学运算。这体现了 Java 中类型转换的便利性和必要性。
程序最后通过System.exit(0)终止程序,这表明在需要的时候可以明确地控制程序的退出。

InputTest.java
当运行这个程序时,控制台会首先显示 “What is your name?”,等待用户输入姓名。用户输入姓名后按下回车键,接着控制台显示 “How old are you? ”,用户输入年龄数字后按下回车键。程序会根据用户输入的姓名和年龄进行处理,并在控制台输出 “Hello, [用户输入的姓名]. Next year, you'll be [用户输入的年龄加一]”。
这个程序展示了如何使用Scanner类从控制台获取用户输入。通过System.in作为参数创建Scanner对象,可以方便地读取用户输入的字符串和整数等不同类型的数据。
程序中对用户输入的年龄进行了简单的计算,预测了下一年的年龄,体现了程序的动态性和交互性。
注释中的代码片段展示了如何在 Java 中进行字符串和整数之间的相互转换。Integer.parseInt()方法可以将字符串转换为整数,String.valueOf()方法可以将整数转换为字符串。这对于处理不同类型的数据非常有用。

TestDouble.java
0.05 + 0.01 = 0.060000000000000005。
1.0 - 0.42 = 0.5800000000000001。
4.015 * 100 = 401.49999999999994。
123.3 / 100 = 1.233。
在 Java 中,使用double类型进行浮点数运算时可能会出现精度问题。这是因为计算机在内部使用二进制来表示浮点数,而有些十进制小数无法精确地用二进制表示。
对于一些对精度要求较高的计算,比如金融领域的计算,不能简单地使用double类型,可能需要使用BigDecimal类来进行精确的数值计算,以避免精度损失带来的问题。
尽管在一般情况下,double类型的精度可能足够满足需求,但在特定场景下需要特别注意其精度局限性。

Demo:TestBigDecimal.java

使用String作为BigDecimal构造器参数的计算结果:
0.05 + 0.01 = 0.06
0.05 - 0.01 = 0.04
0.05 * 0.01 = 0.0005
0.05 / 0.01 = 5
BigDecimal类可以提供精确的数值计算,避免了浮点数运算中的精度问题。在这个例子中,无论是使用String还是double作为构造器参数,进行加、减、乘、除运算都能得到准确的结果。
使用String作为BigDecimal的构造器参数是一种更安全的方式,因为直接使用double可能会因为二进制表示的局限性导致不可预期的结果。然而,在这个例子中,使用double作为构造器参数也得到了正确的结果,可能是因为这里的数值比较简单,没有触发精度问题。
BigDecimal类在需要精确数值计算的场景中非常有用,比如金融计算、科学计算等领域。它提供了丰富的方法来进行各种数学运算,并且可以控制精度和舍入方式。
以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
X+Y=100200
300=X+Y
出现这样结果的原因是:
对于第一行输出语句System.out.println("X+Y="+X+Y);,由于字符串连接操作是从左到右进行的,首先 "X+Y="是一个字符串,当遇到 +X时,会把 X的值(100)转换成字符串并与前面的字符串连接,接着遇到 +Y又把 Y的值(200)转换成字符串继续连接,所以最终输出 "X+Y=100200"。
对于第二行输出语句System.out.println(X+Y+"=X+Y");,先计算 X+Y得到 300,它是一个整数,然后将其转换为字符串与后面的 "=X+Y"连接,所以输出 "300=X+Y"。

Java中的类型转换
在 Java 中进行类型转换时,从 char、byte、short、int、long 这些类型之间转换一般不会有精度损失;而从这些类型向 float 和 double 转换时,会有精度损失。

为什么double类型的数值进行运算得不到“数学上精确”的结果?
double 类型的数值进行运算得不到 “数学上精确” 结果的原因主要是计算机中浮点数的表示方式以及二进制与十进制转换的限制。
double 类型是 64 位的浮点数,在计算机内部采用二进制的科学计数法来表示。它由符号位、指数和尾数三部分组成。

posted on 2024-09-28 00:16  不耻  阅读(14)  评论(0)    收藏  举报

导航