一、编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。
package jisuan;
import javax.swing.JOptionPane;
public class jisuan {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String firstNumber, // first string entered by user
secondNumber; // second string entered by user
int number1, // first number to add
number2,// second number to add
sum,
sub,
mul,
div;
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, "两数之和是: " + sum, "Results",
JOptionPane.PLAIN_MESSAGE );
sub=number1-number2;
JOptionPane.showMessageDialog(
null, "两数相减是: " + sub, "Results",
JOptionPane.PLAIN_MESSAGE );
mul=number1*number2;
JOptionPane.showMessageDialog(
null, "两数相乘是: " + mul, "Results",
JOptionPane.PLAIN_MESSAGE );
div=number1/number2;
JOptionPane.showMessageDialog(
null, "两数相是除: " + div, "Results",
JOptionPane.PLAIN_MESSAGE );
System.exit( 0 );
}
}
二、仔细阅读示例: EnumTest.java,运行它,分析运行结果?
三、你能得到什么结论?你掌握了枚举类型的基本用法了吗?
1.枚举类型是引用类型
2.枚举类型不属于原始数据类型,它的每个具体值都引用一个特定的对象,相同的值则引用 同一个对象。
3.可以使用“==”和equals()直接对比枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。
四、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原 码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。
原码:所谓原码就是二进制的顶点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:正数的反码与原码相同,负数的反码,符号位为“1”,数值部分按位取反
补码:正数的补码与其原码相同,负数的补码是在其反码的末位加一。
Java是采用补码表示
五.Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。
当变量同名时,有些变量会被屏蔽。
Java中如果局部变量名与成员变量与成员变量名相同,则成员变量会被屏蔽,如果想使用成员变量需要使用this操作符。
六
看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?
nt占4个字节32位,取值范围-2147483648---2147483647。
byte占1个字节8位,取值范围:-128--127。
short占2个字节16位,取值范围-32768---32767。
char占两个字节16位,取值范围:0---65535。
long占8个字节64位,取值范围:-9223372036854775808到9223372036854775807。
float占4个字节32位,取值范围-3.4e+38到3.4e+38。
double占8个字节64位,取值范围:-1.7E308到1.7E308
结论:Java中所有数字类型都是有符号的,Java不允许类型的随意转换,只有数字变量可以进行转换但不能随意。带有小数点的数字型变量赋值给所占字节数比他大的类型时不用强制类型转换,此时是自动转型。Int型变量赋值给char型变量时,JVM会以int型变量值到ASCII码表中查到所对应的字符,再赋值给char型变量,反之也是。初始化简单数据类型时要注意赋值的范围,超出则会产生编译错误。
七、请运行以下代码(TestDouble.java)你看到了什么样的输出,意外吗?
使用double类型的数值进行计算,其结果是不精确的
八、为什么double类型的数值进行运算得不到“数学上精确”的结果?
请通过互联网查找资料,或者是阅读相关计算机教材,解决这个问题。
提示:
这个问题,与浮点数在计算机内部的表示方法有关系。可以使用这个知识在搜索引擎中查找相关资料
计算机本身是二进制的,使用fioat,和double节约了内存。计算机的double只能保存有限位数的二进制数,这个过程要截至固定精度,就要舍入。
九、以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?