JAVA作业 02 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);
for(Size value:Size.values())
{ System.out.println(value); }
}} enum Size{SMALL,MEDIUM,LARGE};
1结果截图示例
2 实验分析
枚举类型的每个具体值都引用一个特定的对象,相同值引用同一个对象。因为s和t是不同内容所以引用不同对象。
枚举是引用型变量,枚举类型关键字是enum,类型名自己根据需要定义,可以通过定义变量名来遍历。valueOf() 类型转换,将后边的类型转换成前边的类型。可以在类中定义,也可以在类外定义。
可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。
1)定义
enum 类型名 {内容1,内容2,.....内容n};
2)引用
类型名 变量名=类型名.内容
3)遍历
for( 类型名 变量名:类型名.values()){
System.out.println(变量名); }
二、
思考问题二:反码 原码和补码
1 在计算机内,定点数有3种表示法:原码、反码和补码。原码、反码、补码是相对于整数来说,都是8位二进制表示一个数。反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机一般都不采用反码表示数。
1)原码
最高位为符号位;正数最高位为0,负数为1.
范围 -127~+127
例 +11的原码是00001011,-11原码是10001011.
2)反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但是符号位不变。
范围
-127~+127
例 +11的反码是00001011,-11的反码是11110100
3)补码
正数的补码原码一样;负数的补码是在其反码的末位加一。
范围-128~+127
例 +11补码 00001011,-11补码10000101
2 示例程序
(-83)+(-80)=?
三、
思考问题三:同名变量的屏蔽原则
1.原则:局部变量的名字和全局变量的名字相同,在局部变量的有效范围内,全局变量将失去作用。
2.示例
输出 1,没有屏蔽,因为不同名。
输出2,因为同名,但是在主函数的作用域内,所以以2为主。
四、
思考问题四:浮点数在计算机内部的表示方法
1. 为什么用double类型计算得不到数学上的精确结果?
无论是单精度还是双精度在存储中都分为三个部分:
- 符号位(Sign) : 0代表正,1代表为负
- 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
- 尾数部分(Mantissa):尾数部分
这个涉及到二进制与十进制的转换问题。计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。 double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。
举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。 简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
2.在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。(为什么会这样呢?)
由于浮点数采用二进制系统表示,而二进制无法精确的表示1/10,好比十进制无法精确表示1/3一样。因此,对于很多值浮点数都是采用其能够表示的离目标值近的数来表示,这有可能会在计算中带来不易察觉的误差。为了解决基本数据类型浮点数不能进行精确计算的问题,java中专门提供了java.math.BigDecimal类,其提供浮点数的精确计算功能。
五、
思考问题五:
以下代码的输出结果是什么?为什么会有这样的输出结果?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
因为第一个输出 “x+y=” 是以字符形式输出的,字符和任何数据类型相加都是相连接,形成一个更大的字符串;第二个x和y先做加法运算,再输出300=x+y。
六、
课后实验性问题:编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。
1.程序设计思想:首先在框架中输入两个字符串,转化为整形,然后输入一个符号,利用条件语句判断它是什么运算符号,计算、输出结果(符号输入不符合四则运算的提示错误)。
2.程序流程图:
3.源程序:
//2016/9/30
import javax.swing.JOptionPane;
public class Addition {
public static void main(String[] args) {
String firstNumber,secondNumber,sym;
int number1,number2;
float num;
firstNumber = JOptionPane.showInputDialog("Enter first integer");
secondNumber = JOptionPane.showInputDialog("Enter second integer");
sym = JOptionPane.showInputDialog("Input the symbol");
number1 = Integer.parseInt(firstNumber);
number2 = Integer.parseInt(secondNumber);
if(sym.equals("+"))
{
num = number1 + number2;
JOptionPane.showMessageDialog(null,number1 + "+" + number2 + "=" + num);
}
else if(sym.equals("-"))
{
num = number1 - number2;
JOptionPane.showMessageDialog(null,number1 + "-" + number2 + "=" + num);
}
else if(sym.equals("*"))
{
num = number1 * number2;
JOptionPane.showMessageDialog(null,number1 + "*" + number2 + "=" + num);
}
else if(sym.equals("/"))
{
num = number1 / number2;
JOptionPane.showMessageDialog(null,number1 + "/" + number2 + "=" + num);
}
else
{
JOptionPane.showMessageDialog(null,"Error!");
}
}
}
4.验证结果截图:
5.实验总结:1)在判断字符中“==”和equals分不太清楚;2)在判断字符是否相等时,开始用的单引号,后来才反应过来输入符号时用的是字符串类型,应该改为双引号。
最新评论
评论排行榜
转载于:https://www.cnblogs.com/gxt-/p/5937275.html
JAVA作业 02 JAVA语法基础相关推荐
- Java学习路线(语法基础+算法与数据结构部分)
后端开发学习经验 首先,对于软件基础知识的学习,建议尽可能地去看一些经典的书籍,看第一遍的时候可以不用太过细致,快速地看,重在了解这本书的知识框架,在把握了整体的逻辑框架之后,第二遍就可以详细学习各章 ...
- 【Java 系列笔记】语法基础 + Spring + Spring MVC + SpringBoot + 数据结构
Java 强化笔记目录 Java 语言基础 Java 架构师体系课程 一些课程 前端笔记:前端学习笔记 Java 语言基础 回头补基础(此基础非小白)系列,学校教的其实真的就是一些皮毛而已,怕是连门都 ...
- java作业 温度换算,Java基础题目(温度转换、时间换算、信号报告)
Java基础题目 题目主要来自浙江大学翁凯教授的零基础学习Java课程的配套习题. 1. 温度转换 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 3 ...
- 【Java编程指南】语法基础
目录 一.前言 二.关键字 三.数据类型 1.存储单元 2.存储范围 3.类型转换 四.常量 五.变量 六.标识符 七.注释 一.前言 学习目标 1:熟悉Java的关键字.数据类型(包括范围).常量与 ...
- 常州工学院Java作业02
第1关 第1关 练习-Java数组之一维数值数组之数据去重http://tgpt.czu.cn/tasks/if9yfw6bpz8g 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begi ...
- Java笔记整理-02.Java基础语法
1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...
- 02 Java基础语法(变量+数据类型+运算符)
Java基础语法 2 基础语法 2.1 二进制(复习总结) 进制转换(二进制 八进制 十进制 十六进制) 2.2 变量 2.2.1 变量定义 2.2.2 使用变量 2.2.3 声明变量的3种方式 2. ...
- Java基础笔记(入门,语法基础,流程控制,数组)
Java语言入门 发展历程 三大技术体系 JavaSE 标准版 JavaEE 企业版 JavaME 嵌入式版 Java语言特点 简单性 健壮性 面向对象 分布式 多线程 动态性 可移植性(跨平台) J ...
- 给Java初学者福利——Java语法基础
Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注: 1.Java ...
最新文章
- html post 图片,如何发送图片作为多部分POST请求的一部分 - Java HtmlUnit
- thinkphp的控制器包含在Url中时注意区分大小写
- 第3 章体系结构(Architecture)
- 新手入门python的注意事项_【新手入门Python语言的方法】
- php结合redis实现高并发下的抢购、秒杀功能
- linux100day(day4)--文本处理三剑客
- MYSQL jdbc autoReconnect
- Ubuntu安装ssh server及分配用户
- 2021-08-21 初识javabean
- hdu-5596 GTW likes gt(模拟+优先队列)
- github安装python包_使用PyCharm从GitHub安装Python包
- 330分能进复试的计算机相关专业排行榜(985院校)(共118个专业)
- 怎样在matlab中写技术,rect矩形函数 matlab中怎样编写矩形函数
- Java练习:单选题
- “打开方式”中找不到打开某一类型文件想使用的软件
- Typora+PicGo+Gitee+坚果云搭建云笔记
- 抽象类之定义一个Point类,最后重新定义Rectangle类,使其同时继承Shape和Point类(Point视作Rectangle的左上角),并在Rectangle中添加一些新的成员。
- 有没有可以测试充电宝电流电压的软件,USB充电电流/电压检测仪USB电流和电压测试仪移动电源测试...
- ios怎么创建html,iBooks Author:关于 HTML widget 创建
- 【Proteus仿真】8×8LED点阵屏仿电梯数字滚动显示