Java课后习题总结
1,第一个问题是关于枚举迭代的:
private enum MyEnum{
ONE, TWO, THREE
}
public static void main(String[] args) {
for(MyEnum value:MyEnum.values()){
System.out.println(value);
}
}
这段代码的运行结果是遍历了数组包含 ONE、TWO 和 THREE三个元素,并逐个输出枚举常量的值,这种foreach枚举迭代,无需知道具体枚举的数量,直接就可以按序枚举
2,第二个问题关于两数相加的对话框显示:
这是我第一次了解可以展示对话框的类,内容代码如下:
class Addition {
public static void main( String args[] )
{
String firstNumber, secondNumber;
int number1,number2, sum;
firstNumber = JOptionPane.showInputDialog( "Enter first integer" );
secondNumber = JOptionPane.showInputDialog( "Enter second integer" );
number1 = Integer.parseInt( firstNumber );
number2 = Integer.parseInt( secondNumber );
sum = number1 + number2;
JOptionPane.showMessageDialog(
null, "The sum is " + sum, "Results",
JOptionPane.PLAIN_MESSAGE );
System.exit( 0 ); // terminate the program
}
}
这段代码的关键就在于JOptionPane类与Integer.parseInt方法,JOptionPane类的作用是能将对话框显示出来,而Integer.parseInt则是能将字符串转化为整形
3.那么接下来就到了字符转换时的精度损失了,强制类型转换时,可能会引起信息的损失
代码如下:
public class try {
public static void main(String[] args) {
double number1 = 123456789;
float number2 = (float) number1;
System.out.println(number1);
System.out.println(number2);
}
}
尝试了一下强制类型的字符转换,并出现了精度的损失第一次的输出为1.23456789E8
第二次的输出为1.23456792E8
那么可得在整形数据例如int,long一类数据与浮点型数据例如float,double一类的数据之间转换时,会出现精度的缺失
那么就能尝试Int Long long类型转化成float和double类型的精度损失的问题
内容如下:class TestDouble {
public static void main(String args[]) {
System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
System.out.println("4.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}
结果如下:
0.05 + 0.01 = 0.060000000000000005
1.0 - 0.42 = 0.5800000000000001
4.015 * 100 = 401.49999999999994
123.3 / 100 = 1.2329999999999999
我想在计算机中所有的数据都是以二进制的方式存储的,所有的浮点型数据都是近似的值,所以在小数类的计算时,精度是无法保证的
那么尝试改变精度:
class TestBigDecimal
{
public static void main(String[] args)
{
BigDecimal f1 = new BigDecimal("0.05");
BigDecimal f2 = BigDecimal.valueOf(0.01);
BigDecimal f3 = new BigDecimal(0.05);
//下面使用String作为BigDecimal构造器参数的计算结果:
System.out.println("0.05 + 0.01 = " + f1.add(f2));
System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
System.out.println("0.05 / 0.01 = " + f1.divide(f2));
//下面使用double作为BigDecimal构造器参数的计算结果:
System.out.println("0.05 + 0.01 = " + f3.add(f2));
System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
System.out.println("0.05 / 0.01 = " + f3.divide(f2));
}
}
字符串构造BigDecimal:f1被初始化为"0.05",而f2通过BigDecimal.valueOf(0.01)生成。
使用double值构造BigDecimal:f3通过浮点数0.05初始化。此时进行的计算与使用字符串时相同,但由于浮点数的精度问题,可能会产生不确定的结果。BigDecimal提供了一种解决浮点数精度问题的有效方法,尤其是在需要进行多个数学运算时。使用字符串初始化BigDecimal将提供比直接使用double更高的精度保障。
最后的输出结果:系统输出展示了两组运算的结果,清晰地表明了不同构造方式带来的精度差异。
4,字符串链接的相关注意:
public class Line {
public static void main(String[] args)
{
int X = 100;
int Y = 200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"= X+Y");
}
}
System.out.println("X+Y=" + X + Y);
这里"X+Y="是一个字符串,X(值为100)直接被转换为字符串形式并与前面的字符串连接。连接的结果是"X+Y=100",接着与Y(值为200)继续连接,结果为"X+Y=100200"。
System.out.println(X + Y + "= X+Y");
在此行中,由于X和Y都是整数,首先执行X + Y的运算,得到300。然后再将300与"= X+Y"字符串连接,最终输出结果为"300= X+Y"。
5,随机数的生成:
这里主要就是random的运用了,黑马程序员里有比较详细的解说
代码如下:
import java.util.Random;
public class MathQuiz {
private static final int NUMBER_OF_QUESTIONS = 30;
private static final int MAX_RANDOM_NUMBER = 10;
private static final int OPERATIONS_COUNT = 4;
public static void main(String[] args) {
Random random = new Random();
for (int i = 0; i < NUMBER_OF_QUESTIONS; i++) {
generateQuestion(random); }
}
private static void generateQuestion(Random random) {
int number1 = random.nextInt(MAX_RANDOM_NUMBER) + 1;
int number2;
int operation = random.nextInt(OPERATIONS_COUNT); // 确保当操作为除法时,number2 不为零
if (operation == 3) {
number2 = random.nextInt(MAX_RANDOM_NUMBER) + 1; // 除法运算,number2 不能为零
}
else {
number2 = random.nextInt(MAX_RANDOM_NUMBER + 1);
}
switch (operation) {
case 0: System.out.println(number1 + " + " + number2 + " = ?"); break; case 1: System.out.println(number1 + " - " + number2 + " = ?"); break; case 2: System.out.println(number1 + " * " + number2 + " = ?"); break; case 3: System.out.println(number1 + " / " + number2 + " = ?"); break;
}
}
}