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包住整段的代码 ...
随机推荐
- 解决css中display:inline-block产生的空隙问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (3)LoraWAN:链路控制、SF BW CR
三.Introduction on LoRaWAN options 本文件描述了一种用于可为移动的或固定在一个固定位置的电池供电的终端设备而优化的LoRaWAN™网络协议.LORA™是一个由Semte ...
- 搭建solr集群的时候出现 ./zkcli.sh:行13: unzip: 未找到命令
主要的原因是: linux系统下面没有安装压缩解压工具 zip 和 unzip:需要我们自己手动的安装: 利用yum命令安装即可: yum install -y unzip zip
- SeekBar和RatingBar的基本使用方法
SeekBar: main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- Windows篇:链接linux->"Xmanager"
Windows篇:链接linux->"Xmanager" Xmanager是什么? Xmanager是一款小巧.便捷的浏览远端X窗口系统的工具.在工作中经常使用Xmanage ...
- Python【day 19】反射
'''''' ''' 一.昨日内容回顾 1.依赖关系 1.弱关系.多态 1.松耦合 2.大象可以装冰箱,也可以装高压锅,就是多态 2.例子: 1.大象装冰箱 2.大象装高压锅 3.你打车 3.写法 大 ...
- 解决vmware 桥联 再次使用联不上网的问题
在vmare里 编辑 虚拟网络配置 桥联 自动设置 改为你正在联网的网卡 这个问题针对有线网卡 和无限网卡使用的问题
- 题解 P5122 【[USACO18DEC]Fine Dining】
思路:最短路+dp 1.先跑一遍最短路,计算出没有干草垛最少要多少时间 2.dp求出有干草垛至少需要多少时间,由于dp有后效性,所以用SPFA辅助转移,dp方程和求最短路一模一样,只是先将有干草垛的拉 ...
- git+jenkins jar包代码的发布加新建项目
1.本地仓库 java开发 把代码上传上来 ,问一下他要上传到的主机ip , 分支 2.本地 , 设置-->仓库 更新数据,让他同步到南阳gitlab, 若没有这个项目,需要创建相同名字的项目 ...
- python表白实现代码(可视化与动画版)
python表白实现代码(可视化与动画版)如何优雅而又高大上地对自己的心爱女神表白了? ? ? 试试python表白的实现方式吧,是动画版的哦,保证可以如你所愿 ! ! !最终的实现效果如下: 具体实 ...