2019-9-16 java上课知识整理总结(动手动脑,课后实验)
java上课知识整理总结(动手动脑,课后实验)
一,课堂测试
1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件”
要求:(1)题目避免重复;
(2)可定制(数量/打印方式);
2,设计思路
1),产生两个1-100的随机数作为题目参与运算的数据,产生一个1-100的随机数并对4求余作为运算符(0:‘+’,1:‘-’,2:‘*’,3:‘/’)。
2),用for循环控制出题个数n,用循环变量i对一行出题个数m求余,余数为0换行控制一行中题目的个数。
3),在减法中用while(s1<s3)循环(s1,s3是参与运算的数)循环体是新生成一个随机数赋给s3,保证结果非负。
4),在乘法中用while(s1*s3>100)循环(s1,s3是参与运算的数)循环体是新生成一个随机数赋给s3,保证结果小于100。
5),在除法中用while(s1/s3!=0)循环(s1,s3是参与运算的数)循环体是新生成一个随机数赋给s3,保证结果为正数。
6),用数组存储之前所有输入的操作数和运算符用for循环判断是否重复若重复新生成一个随机数赋给s3,保证出题不重复。
3,代码
import java.util.Random;
import java.util.Scanner;
public class suanshu {
static Scanner sc = null;
public static int s1 = new Random().nextInt(100);
public static int s2 = new Random().nextInt(100);
public static int s3 = new Random().nextInt(100);
public static int a[][]=new int[100000][2] ;//用于从操作数 public static int s[]=new int[100000];//用于存操作符 public static void main(String[] args) { sc = new Scanner(System.in);
System.out.println("请输入题数:");
int n=sc.nextInt();
System.out.println("请输入每行的题数:");
int m=sc.nextInt(); for(int i=0;i<n;i++) {
if((i)%m==0)
System.out.print("\n");
System.out.print((i+1)+":"); //产生随机数
s1 = new Random().nextInt(100);
System.out.print(s1);
s2 = new Random().nextInt(100);
s3 = new Random().nextInt(100); //检查重复
a[i][0]=s1;
a[i][1]=s3;
s[i]=s2;
for(int j=0;j<i;j++) {
if(a[j][0]==s1&&a[j][1]==s3&&s[j]==s2) {
s3 = new Random().nextInt(100);
while(s3==a[i][1]) {
s3 = new Random().nextInt(100);
}
s3 = new Random().nextInt(100);
while(s3==a[i][1]) { }
}} //判断操作符
if(s2%4==0)
System.out.print("+");
if(s2%4==1) {
System.out.print("-"); while(s1<s3) {
s3 = new Random().nextInt(100);
} } if(s2%4==2) {
System.out.print("*");
while(s1*s3>=100) {
//s1 = new Random().nextInt(100);
s3 = new Random().nextInt(100);
}
} if(s2%4==3) {
System.out.print("/");
while(s3!=0&&s1/s3!=0){
//s1 = new Random().nextInt(100);
s3 = new Random().nextInt(100);
}
} System.out.print(s3);
System.out.print("=");
System.out.print(" "+'\t');
} } }
4,运行测试
二,动手又动脑_1
1,问题:仔细阅读示例: EnumTest.java,运行它,分析运行结果?你能得到什么结论?你掌握了枚举类型的基本用法了吗?
2,代码
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};
3,运行测试
4,结论
1)枚举变量中实例化的对象的不同元素的地址不同
2)枚举变量中实例化的对象的的元素不是java的基本数据类型。
3)从字符串中转换的枚举变量中实例化的对象的的元素赋给新的变量和原变量的地址相同。
4)可以使用“==”直接比对枚举变量的值。
二,动手又动脑_2
1,问题:以下代码的输出结果是什么?为什么会有这样的输出结果?
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"); }
}
运行测试
2,答:
首先,可用于System.out.println里面的加号一般情况下有两种意义
第一: 连接字符串 , 假如需要连接的字符串比较长此时也可用加号进行换行连接
例如:System.out.println("X+Y="+X+Y);第一个遇到的是字符串所以后面的X,Y也转换为字符转连接输出了
X+Y=100200
而System.out.println(X+Y+"=X+Y");第一个遇到的X与第二个遇到的Y是int型第三个是字符串所以连接输出了运算结果和字符串。
300=X+Y
第二: 进行运算 , 当然进行运算时 , 需要附加括号 比如:System.outprintln("运算结果:" + (1+2)); 结果:运算结果:3
二,动手又动脑_3
1,问题:Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。
2,自测代码:
package ClassAfter; public class Maskingsamename {
private static int a=1;
public static void main(String[] args) {
int a=10;
System.out.println(a);
} }
运行测试:
二,动手又动脑_4
1问题:
2,每个数据类型所占的位数和取值范围:
①byte(字节):8bits,数值范围为-128-127
②short(短整型):16bits,数值范围为-32768-32768
③int(整型):32bits,数值范围为-2147483648-2147483648
④long(长整型):64bits,数值范围为-9233372036854477808-9233372036854477808
⑤float(浮点型):32bits,数值范围为-3.40292347E+38-3.40292347E+38
⑥double(双精度):64bits,数值范围为-1.7976931486231570E+308-1.7976931486231570E+308
⑦char(字符型):16bits,数值范围为‘\u0000-u\ffff’
⑧boolean(布尔型):1bits,数值范围为true/false
3,结论
java中的基本数据类型转换分为自动类型转换和强制类型转换。自动数据类型转换是由优先级别低的数据赋值给优先级别高的变量。强制类型转换是由优先级别高的数据赋值给优先级别低的变量。强制类型转换通常都会有存储精度的损失。在整数之间进行类型转换时,数值不发生改变;而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在精度上的损失。
三,动手实验_1
1,问题:请运行以下代码(TestDouble.java)
public class TestDouble { 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));
System.out.println(0.1+0.2);
}
}
你看到了什么样的输出,意外吗?
答:意外!
出现此结果的原因:变量的存储方式不同,不同浮点数在计算机中存的尾数不同:
float 和double类型主要是为科学计算和工程计算而设计的,他们执行二进制浮点运算,这两种类型在计算机中的储存分为三部分:符号位、指数为、尾数部分。数据以二进制存储在计算机时,会出现无线循环系列,在数据转化中会出现错误。十进制不能准确的表示1/3,同样二进制不能精确的表示1/10。
double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,还有63位,而我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
2019-9-16 java上课知识整理总结(动手动脑,课后实验)的更多相关文章
- 2019.9.16:java课后测验
一.动手动脑 1. 枚举类型是引用类型, 枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. 可以使用“==”和equals()方法直接比对枚举变量的值,换句话说, ...
- Java并发知识整理
整理了一下前段时间学习Java并发的笔记,大约有40篇. 1. Java并发基础知识 并发基础(一) 线程介绍 并发基础(二) Thread类的API总结 并发基础(三) java线程优先级 并发基础 ...
- java 集合知识整理
java集合类图 HashMap和Hashtable的区别 HashMap HashTable 继承方式 extends AbstractMap implements Map extends D ...
- java基础知识整理
java基础入门知识(转载请注明出处.) 1.JVM.JRE和JDK的区别. (1)JVM(Java Virtual Machine):java虚拟机,用于保证java跨平台的特性,java语言是跨平 ...
- JAVA hashmap知识整理
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vect ...
- java基础知识整理:
一, Java中的继承: 1. final关键字(最终的,不可修改的不可变化的,可以修饰类,方法,变量等): 如果final修饰类的话,这个类不可以被继承: 如果修饰方法的话,这个方法不可以被子类覆盖 ...
- Java基础知识整理(一)
Java开发环境JDK(Java编辑器.Java运行工具(JRE作用).Java文档生成工具.Java打包工具) 1.Java是严格区分大小写的.2.Java程序中一句连续的字符串不能分开在两行书写, ...
- Java多线程知识整理
多线程 1. 多线程基础 多线程状态转换图 普通方法介绍 yeild yeild,线程让步.是当前线程执行完后所有线程又统一回到同一起跑线.让自己或者其他线程运行,并不是单纯的让给其他线程. join ...
- Java异常知识整理_处理异常时的性能开销
1.首先列两个从别的地方看到的说法: try-catch代码段会产生额外的性能开销,或者换个角度说,它往往会影响JVM对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的try包住整段的代码 ...
随机推荐
- day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)
1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...
- 如何配置nginx
Nginx安装手册 1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n gcc 安装nginx需要先将官网下载的源码进行编译,编译 ...
- ibd2sdi — InnoDB表空间SDI提取实用程序
参考mysql8.0官方文档 https://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html ibd2sdi是一个实用程序,用于从表空间文件中提取 序列化的字 ...
- 关于页面跳转之后获取不到session数据的问题
暂时的解决方法有两种,亲测有效: 方法一: 将页面跳转方式由a标签改为请求转发request.getRequestDispatcher("stu_list.jsp").forwa ...
- 吴裕雄--天生自然Hadoop学习笔记:Hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop实现了一个分布式文件系统(H ...
- 设备树DTS 学习:Linux DTS文件加载过程
背景 了解机制有利于对内核有更深的认识. wget https://mirrors.aliyun.com/linux-kernel/v3.x/linux-3.2.61.tar.xz 内核 在drive ...
- js - 获取当前年月日
var date = new Date(); date .getYear(); //获取当前年份(2位) date .getFullYear(); //获取完整的年份(4位) date .getMon ...
- Linux-initramfs
1. 内核启动问题2. 解决方案2.1 ramdisk(比如initrd)2.2 tmpfs(比如initramfs)2.3 ramdisk vs ramfs2.4 临时文件系统2.4.1 观察tmp ...
- 7.5 Varnish VCL的变量和应用片段
- Netty的出现
原生NIO存在的问题 NIO的类库和API复杂, 使用麻烦: 需要熟练掌握Selector.ServerSocketChannel.SocketChannel.ByteBuffer 等. 需要具备其他 ...