一、仔细阅读示例: EnumTest.java,运行它,分析运行结果。你能得到什么结论?你掌握了枚举类型的基本用法了吗?实验结果如图

二、

请运行以下代码(TestDouble.java)你看到了什么样的输出,意外吗?

意外,发现使用double类型的数值进行计算,其结果是不精确的。这个涉及到二进制与十进制的转换问题。 N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(100次幂)+4×(10-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(20次幂)+0+1×(2-2次幂)=十进制的3.25 double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2n次方)。 举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应21,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("错误");

      

     }

}