失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > JAVA语法基础 动手动脑及课后作业

JAVA语法基础 动手动脑及课后作业

时间:2023-10-01 07:36:31

相关推荐

JAVA语法基础 动手动脑及课后作业

动手动脑1:

仔细阅读示例:EnumTest.java,运行它,分析运行结果?

publicclassEnumTest{

publicstaticvoidmain(String[]args){

Sizes=Size.SMALL;

Sizet=Size.LARGE;

//s和t引用同一个对象?

System.out.println(s==t);//

//是原始数据类型吗?

System.out.println(s.getClass().isPrimitive());

//从字符串中转换

Sizeu=Size.valueOf("SMALL");

System.out.println(s==u);//true

//列出它的所有值

for(Sizevalue:Size.values()){

System.out.println(value);

}

}

}

enum Size{SMALL,MEDIUM,LARGE};

运行结果:falsefalsetrueSMALLMEDIUMLARGE

你能得到什么结论?你掌握了枚举类型的基本用法了吗?

枚举类型的常量以字符串的形式顺序储存,枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

动手动脑2:看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

char8位二进制数范围是-2的7次方到2的7次方-1,byte8位带符号整数-128到127之间的任意整数,short16位无符号整数-32768到32767之间的任意整数,int32位带符号整数-2的31次方到2的31次方-1之间的任意整数,long64位带符号整数-2的63次方到2的63次方-1之间的任意整数,float32位单精度浮点数,double64位双精度浮点数。

结论是:Java会自动完成从低级类型向高级类型转换,即取值范围相对较小的数据类型转换成取值范围相对较大的数据类型。

动手实验:请运行以下代码(TestDouble.java)

publicclassTestDouble{

publicstaticvoidmain(Stringargs[]){

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

实验截图:

为什么double类型的数值进行运算得不到“数学上精确”的结果?

请通过互联网查找资料,或者是阅读相关计算机教材,解决这个问题。

提示:这个问题,与浮点数在计算机内部的表示方法有关系。可以使用这个知识在搜索引擎中查找相关资料

事实上浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用float和double作精确运算的时候要特别小心。可以考虑采用一些替代方案来实现。如通过使用long类型来转换。我们知道在计算机中浮点数的表示方法是由一个整数(即尾数)乘以一个基数(计算机中一般为2)的整次幂得到。(类似于科学计数法,科学记数法基数为10)float的内存结构为:符号位表示正负,1位指数位,8位尾数位,32位(符号位1表示负,0表示正)指数是以2为底的,范围是-128到127,如果超过了127,则从-128开始计。即:127+1=-128尾数都省去了第1位的1,所以在还原时要先在第一位加上1。它可能包含整数和纯小数两部分,也可能只包含其中一部分,视数字大小而定。对于带有整数部分的浮点数,其整数的表示法有两种,当整数大于十进制的16777215时使用的是科学计数法,如果小于或等于则直接采用一般的二进制表示法。科学计数法和小数的表示法是一样的。小数部分则是直接使用科学计数法,形式是X*(2^n)。这样就导致浮点类型在计算机的存贮中无法精确表示。

动手动脑3:

以下代码的输出结果是什么?

intX=100;

intY=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)中的“+”为连接运算符,

System.out.println(X+Y+"=X+Y")中的“+”为加法运算符,即为两个数相加。

课后练习:阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

在计算机内,定点数有3种表示法:原码、反码和补码。反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机一般都不采用反码表示数。

所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

原码10010=反码11101(10010,1为符号码,故为负)

(11101)二进制=-2十进制

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

课后作业:编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。

importjavax.swing.JOptionPane;

publicclassYusuan{

publicstaticvoidmain(String[]args){

//TODO自动生成的方法存根

StringfirstNumber,secondNumber;

intnumber1,number2,sum,minus,multiply,divide;

//readinfirstnumberfromuserasastring

firstNumber=JOptionPane.showInputDialog("Enterfirstinteger");

//readinsecondnumberfromuserasastring

secondNumber=JOptionPane.showInputDialog("Entersecondinteger");

//convertnumbersfromtypeStringtotypeint

number1=Integer.parseInt(firstNumber);

number2=Integer.parseInt(secondNumber);

//yunsuanthenumbers

sum=number1+number2;

minus=number1-number2;

multiply=number1*number2;

divide=number1/number2;

//displaytheresults

JOptionPane.showMessageDialog(null,"和为:"+sum+"差为:"+minus+"积为:"+multiply+"商为:"+divide,"Results",JOptionPane.PLAIN_MESSAGE);//在窗口上显示结果

System.exit(0);//释放空间

}

}

输出结果:

如果觉得《JAVA语法基础 动手动脑及课后作业》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。