java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )
一、课堂测试
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)用一个二维数组和一个一维数组存储之前所有输入的数字和运算符,再用循环判断是不是重复生成,如果重复生成,则重新生成数字或者运算符,用来保证出题不重复。
package yang9;
/*
* 信185-1
*20183504
* 肖洋
*/
import java.util.Random;
import java.util.Scanner;
public class computer {
static Scanner input=new Scanner(System.in);
static String []str=new String[4];
public static void main(String[]args) {
int []a=new int[10000000];
int []b=new int[10000000];
int []c=new int[10000000];
System.out.println("请输入打印总题数:");
int sum=input.nextInt();
System.out.println("请输入每行打印题目数:");
int i=input.nextInt();
str[0]="+";
str[1]="-";
str[2]="*";
str[3]="/";
Random rand=new Random();
int num1,num2,num3;
for(int d=0;d<sum;d++)
{
System.out.print((d+1)+". ");
int count=0;
num1=rand.nextInt(99)+1;
num2=rand.nextInt(4);
num3=rand.nextInt(99)+1;
for(int j=0;j<count;j++) {
if(a[j]==num1&&b[j]==num2&&c[j]==num3) {
num1=rand.nextInt(99)+1;
num2=rand.nextInt(4);
num3=rand.nextInt(99)+1;
}
}
if(num2==0)
{
System.out.print(num1);
System.out.print(str[num2]);
System.out.print(num3+"= ");
}
if(num2==1)
{
while(num3>num1) {
num3=rand.nextInt(99)+1;
}
System.out.print(num1);
System.out.print(str[num2]);
System.out.print(num3+"= ");
}
if(num2==2)
{
while(num3*num1>=100)
{
num1=rand.nextInt(99)+1;
num3=rand.nextInt(99)+1;
}
System.out.print(num1);
System.out.print(str[num2]);
System.out.print(num3+"= ");
}
if(num2==3)
{
while(num1%num3!=0)
{
num1=rand.nextInt(99)+1;
num3=rand.nextInt(99)+1;
}
System.out.print(num1);
System.out.print(str[num2]);
System.out.print(num3+"= ");
}
a[count]=num1;
b[count]=num2;
c[count]=num3;
count++;
if((d+1)%i==0)
{
System.out.println("\n");
}
}
}
}
运行结果如下:
二、动手动脑题
1、问题:仔细阅读示例: EnumTest.java,运行它,分析运行结果?你能得到什么结论?你掌握了枚举类型的基本用法了吗?
程序代码如下:
public class EnumTest { public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用同一个对象?
System.out.println(s==t); //
//是原始数据类型吗?
System.out.println(s.getClass().isPrimitive());
//从字符串中转换
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//列出它的所有值
for(Size value:Size.values()){
System.out.println(value);
}
} }
enum Size{SMALL,MEDIUM,LARGE};
运行结果:
结论:
(1)枚举类型是引用类型,枚举的每一个具体值都引用一个特定对象,引用不同具体值对象地址不同。
(2)从字符串中转换的枚举类型中实例化的对象的的具体值赋给新的枚举类型实例化对象和原枚举类型中实例化的对象的地址相同。
(3)枚举类型中实例化的对象的的具体值不是java的基本数据类型,而是用户自定义的数据类型。
(4)枚举类型的数据元素就是枚举类型中所有具体值。
2、问题:请运行以下代码,你看到了什么样的输出,意外吗?
代码:
public class test { public static void main(String args[]) {
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));
}
}
输出:
结论:
使用double类型的数值进行计算,计算结果是不精确的。
原因:二进制和十进制的转换出现问题,简单来说就是我们给出的数值,在大多数的情况下需要比64bit更多的位数才能
准确表示出来,而double类型的数值只有64bit,后面舍去的位数一定会带来的误差,无法得到数学上精确的结果。
3、问题:以下代码的输出结果是什么?为什么会有这样的输出结果?
public class Test {
public static void main(String[] args) {
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y"); }
}
输出结果:
原因:
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 。
最新文章
- log4net的各种Appender配置示例
- jQuery源码解读 - 数据缓存系统:jQuery.data
- [PL/SQL]使用PL/SQL实现ORACLE的Excel格式导入导出
- iOS开发之正则表达式
- 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离
- 18:字符串-char型字符串
- javascript删除目标标签
- The windows PowerShell snap-in &#39;Microsoft.Crm.PowerShell&#39; is not installed on this computer
- linux 下的对拍
- ASP.NET MVC的跳转攻击问题
- 转:Jmeter以non-gui模式进行分布式测试
- CCIE-MPLS基础篇-实验手册
- JMeter获取JSON内容
- python 字符串的方法
- ONI无法启动: Uh oh! Unable to launch Neovim...
- java.util.List API解读
- Redux的梳理
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
- mac10.12.6系统使用cmake安装opencv3.3.0+opencv_contrib-3.3.0
- 【Unity】第12章 导航网格和寻路
热门文章
- C语言:求n(n<;10000)以内的所有四叶玫瑰数。-将字符串s1和s2合并形成新的字符串s3,先取出1的第一个字符放入3,再取出2的第一个字符放入3,
- javac 编译引用外部指定jar包进行编译和执行编译后的class文件
- 【笔记2-环境配置及初始化】从0开始 独立完成企业级Java电商网站开发(服务端)
- 细说unittest
- MDC 输出线程信息帮助定位问题
- spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询
- Nexus-vPC基础实验
- print、println、printf的区别(转载)
- Session服务器之Session复制!
- sql语句插入时提示:“Duplicate entry &#39;XXX&#39; for key 1 ” 是什么原因?