java课堂第一次随机测试和课件课后动手动脑问题解决(2019916 )

一、课堂测试

1、课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件”

要求 (1)减法结果不能为负数

   (2)乘法结果不得超过一百,除法结果必须为整数

   (3)题目避免重复;

   (4)可定制(数量/打印方式);

2、程序设计思路

(1)产生两个1-100的随机数作为题目参与运算的数据,产生一个1-4的随机数作为加减乘除运算符打印

(2)用for循环控制出题个数c,用循环次数i对一行打印题目数求余为0达到一行出题要求输出换行

(3)在减法程序中用while(d1<d3)循环来保证减法结果不能为负数

(4)在乘法程序中用while(s1*s3>100)循环来保证乘法结果不超过一百,用循环判断除法最终结果为整数

(5)用一个二维数组和一个一维数组存储之前所有输入的数字和运算符,再用循环判断是不是重复生成,如果重复生成,则重新生成数字或者运算符,用来保证出题不重复。

 1 package yang9;
 2 /*
 3  * 信185-1
 4  *20183504
 5  * 肖洋
 6  */
 7 import java.util.Random;
 8 import java.util.Scanner;
 9 public class computer {
10     static Scanner input=new Scanner(System.in);
11     static String []str=new String[4];
12     public static void main(String[]args) {
13         int []a=new int[10000000];
14         int []b=new int[10000000];
15         int []c=new int[10000000];
16         System.out.println("请输入打印总题数:");
17         int sum=input.nextInt();
18         System.out.println("请输入每行打印题目数:");
19         int i=input.nextInt();
20         str[0]="+";
21         str[1]="-";
22         str[2]="*";
23         str[3]="/";
24         Random rand=new Random();
25         int num1,num2,num3;
26       for(int d=0;d<sum;d++)
27       {
28           System.out.print((d+1)+". ");
29           int count=0;
30           num1=rand.nextInt(99)+1;
31             num2=rand.nextInt(4);
32             num3=rand.nextInt(99)+1;
33           for(int j=0;j<count;j++) {
34               if(a[j]==num1&&b[j]==num2&&c[j]==num3) {
35                   num1=rand.nextInt(99)+1;
36                   num2=rand.nextInt(4);
37                     num3=rand.nextInt(99)+1;
38               }
39           }
40           if(num2==0) 
41           {
42               System.out.print(num1);
43               System.out.print(str[num2]);
44               System.out.print(num3+"=   ");
45           }
46           if(num2==1)
47           {
48               while(num3>num1) {
49                   num3=rand.nextInt(99)+1;
50               }
51               System.out.print(num1);
52               System.out.print(str[num2]);
53               System.out.print(num3+"=   ");    
54           }
55           if(num2==2) 
56           {
57               while(num3*num1>=100) 
58               {
59                   num1=rand.nextInt(99)+1;
60                   num3=rand.nextInt(99)+1;
61               } 
62               System.out.print(num1);
63               System.out.print(str[num2]);
64               System.out.print(num3+"=   ");   
65           }
66           if(num2==3) 
67           {
68               while(num1%num3!=0) 
69               {
70                   num1=rand.nextInt(99)+1;
71                   num3=rand.nextInt(99)+1;  
72               }
73               System.out.print(num1);
74               System.out.print(str[num2]);
75               System.out.print(num3+"=   ");  
76           }
77           a[count]=num1;
78           b[count]=num2;
79           c[count]=num3;
80           count++;
81           if((d+1)%i==0) 
82           {
83               System.out.println("\n");  
84           }
85       }
86 }
87 }

运行结果如下:

 二、动手动脑题

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

程序代码如下:

 1 public class EnumTest {
 2 
 3     public static void main(String[] args) {
 4         Size s=Size.SMALL;
 5         Size t=Size.LARGE;
 6         //s和t引用同一个对象?
 7         System.out.println(s==t);  //
 8         //是原始数据类型吗?
 9         System.out.println(s.getClass().isPrimitive());
10         //从字符串中转换
11         Size u=Size.valueOf("SMALL");
12         System.out.println(s==u);  //true
13         //列出它的所有值
14         for(Size value:Size.values()){
15             System.out.println(value);
16         }
17     }
18 
19 }
20  enum Size{SMALL,MEDIUM,LARGE};

运行结果:

 结论:

(1)枚举类型是引用类型,枚举的每一个具体值都引用一个特定对象,引用不同具体值对象地址不同。

(2)从字符串中转换的枚举类型中实例化的对象的的具体值赋给新的枚举类型实例化对象和原枚举类型中实例化的对象的地址相同。

(3)枚举类型中实例化的对象的的具体值不是java的基本数据类型,而是用户自定义的数据类型。

(4)枚举类型的数据元素就是枚举类型中所有具体值。

 2、问题:请运行以下代码,你看到了什么样的输出,意外吗?

代码:

1 public class test {
2 
3     public static void main(String args[]) {
4         System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
5         System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
6         System.out.println("4.015 * 100 = " + (4.015 * 100));
7         System.out.println("123.3 / 100 = " + (123.3 / 100));
8     }
9 }

输出:

结论:

使用double类型的数值进行计算,计算结果是不精确的。

原因:二进制和十进制的转换出现问题,简单来说就是我们给出的数值,在大多数的情况下需要比64bit更多的位数才能

准确表示出来,而double类型的数值只有64bit,后面舍去的位数一定会带来的误差,无法得到数学上精确的结果。

 3、问题:以下代码的输出结果是什么?为什么会有这样的输出结果?

1 public class Test {
2 public static void main(String[] args) {
3     int X=100;
4     int Y=200;
5     System.out.println("X+Y="+X+Y);
6     System.out.println(X+Y+"=X+Y");
7 
8 }
9 }

输出结果:

 原因:

1.System.out.println(""X+Y="+X+Y")第一个遇到是字符串,所以后面输出的X和Y都会按照字符串来输出,所以并不会计算X+Y的值,所以输出结果为:X+Y=100200 。

2.而System.out.println(X+Y+"=X+Y")第一个遇到的是int型的X,第二个遇到的是int型的Y,所以输出二者相加的int型结果,再连接输出后面的字符串"=X+Y",所以

输出结果300=X+Y 。

3.System.out.println()中的加号一般用来连接字符串,但是如果是System.out.println("X+Y="+(X+Y))中的后面的加号用来运算,即加号没有括号括起时,

是连接字符串的作用,如果加号被括号括起来是进行运算的作用,所以System.out.println("X+Y="+(X+Y))的输出结果为:X+Y=300 。

原文地址:https://www.cnblogs.com/yang2000/p/11535748.html