一、仔细阅读示例: EnumTest.java,运行它,分析运行结果。你能得到什么结论?你掌握了枚举类型的基本用法了吗?实验结果如图
二、
请运行以下代码(TestDouble.java)你看到了什么样的输出,意外吗?
意外,发现使用double类型的数值进行计算,其结果是不精确的。这个涉及到二进制与十进制的转换问题。 N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。 double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。 举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。 简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
解决方法——使用BigDecimal类。在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。
三、编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。
代码如下:
// An addition program
import javax.swing.JOptionPane; // import class JOptionPane
public class Addition {
public static void main( String args[] )
{
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,reduction,multiply,divide; // sum of number1 and number2
// read in first number from user as a string
firstNumber =
JOptionPane.showInputDialog( "Enter first integer" );
// read in second number from user as a string
secondNumber =
JOptionPane.showInputDialog( "Enter second integer" );
// convert numbers from type String to type int
number1 = Integer.parseInt( firstNumber );
number2 = Integer.parseInt( secondNumber );
// add the numbers
sum = number1 + number2;
reduction=number1 - number2;
multiply=number1 * number2;
divide=number1/number2;
// display the results
JOptionPane.showMessageDialog(
null, "The sum is " + sum, "Results",
JOptionPane.PLAIN_MESSAGE );
JOptionPane.showMessageDialog(
null, "The reduction is " + reduction, "Results",
JOptionPane.PLAIN_MESSAGE );
JOptionPane.showMessageDialog(
null, "The multiply is " + multiply, "Results",
JOptionPane.PLAIN_MESSAGE );
JOptionPane.showMessageDialog(
null, "The divide is " + divide, "Results",
JOptionPane.PLAIN_MESSAGE );
System.exit( 0 ); // terminate the program
}
}
四、以下代码的输出结果是什么?
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=300;
五、在上网时,我们经常会看到以下这种对话框,要用户输入一个验证码。如果要由你写一个自动生成验证码的程序,你能完成这个任务吗?
答:可以,源代码如下
//jeson 验证码系统
import java.util.*;
import javax.swing.JOptionPane;
public class Verification {
public static void main(String args[]){
Random rand=new Random();
int ran1=0,ran2=0,ran3=0,ran4=0;//ran表示随机数
ran1=rand.nextInt(10);
ran2=rand.nextInt(10);
ran3=rand.nextInt(10);
ran4=rand.nextInt(10);
//输出验证码
JOptionPane.showMessageDialog(
null, "验证码是" + ran1+ran2+ran3+ran4, "Results",
JOptionPane.PLAIN_MESSAGE );
String firstNumber;//输入验证码的载体
firstNumber =
JOptionPane.showInputDialog( "请输入验证码" );
int n1=Integer.parseInt(firstNumber);//将输入的数组转化为int型给n1
int n2=Integer.parseInt(ran1+""+ran2+""+ran3+""+ran4+"");//将随机数转化为数组再转化为int给n2
//判断验证码输入正确与否
if(n1==n2) System.out.println("正确");
else System.out.println("错误");
}
}
浙公网安备 33010602011771号