首页 > 编程语言 >Java课后习题总结

Java课后习题总结

时间:2024-09-28 11:46:34浏览次数:1  
标签:Java BigDecimal System 0.05 number2 课后 println 习题 out

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;
}
}
}

标签:Java,BigDecimal,System,0.05,number2,课后,println,习题,out
From: https://www.cnblogs.com/tiandaochouq/p/18437179

相关文章

  • 课后时间
    1.课后实验:出三十道一百以内的四则运算importjava.util.Random;publicclasshomework{publicstaticvoidmain(String[]args){intnum1,num2,temp,choose;num1=0;num2=0;temp=0;choose=0; for(inti=1;i<=30;i++) { choose=add();//将随机得到一个一百以内的......
  • java 第一次课后感想
    一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做。针对上述描述,我要写一个简单的程序,以下是代码示例:packagetest;importjava.util.Random;importjava.util.Scanner;publicclassTeat3{publicstaticvoidmain(String[]......
  • java本周学习心得
    EnumTest:publicclassEnumTest{ publicstaticvoidmain(String[]args){ Sizes=Size.SMALL; Sizet=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t);// //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //从字符串中转换 Size......
  • java动手动脑-2024.9.28
    枚举类publicclassEnumTest{publicstaticvoidmain(String[]args){Sizes=Size.SMALL;Sizet=Size.LARGE;System.out.println(s==t);System.out.println(s.getClass().isPrimitive());Sizeu=Size.valueOf(&quo......
  • 【JAVA开源】基于Vue和SpringBoot美容院管理系统
    博主说明:本文项目编号T055,文末自助获取源码\color{red}{T055,文末自助获......
  • 【JAVA开源】基于Vue和SpringBoot服装销售平台
    博主说明:本文项目编号T054,文末自助获取源码\color{red}{T054,文末自助获......
  • 基于java+springboot的软件技术交流平台设计与实现演(源码+lw+部署文档+讲解等)
    前言......
  • 基于java+springboot的软件产品展示销售系统(源码+lw+部署文档+讲解等)
    前言......
  • java第一次正式课程课后习题
    s和t并非引用同一对象,不同的值引用不同对象,相同值引用相同对象。枚举类型并非原始数据类型,而是引用数据类型。采用.velueof和.从枚举类型中赋值效果相同。java中的数采用补码形式表示。由示例可知,局部变量与全局变量重名时会在局部屏蔽全局变量,采用局部变量。java中API中......
  • 课后练习
    packageshi;importjava.util.Random;publicclassshi{publicstaticvoidmain(String[]args){Randomrandom=newRandom();intnum1,num2,result=0;intoperation;for(inti=0;i<30;i++){//Generaterandomnumbersbet......