《JAVA语言》课问题汇总
一、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。
1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式.
2. 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
3. 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
二、课堂测试1:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件”。
package calculate;
public class calculate {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
class Calculat{
public static void main(String[] args) {
for(int i=1;i<=30;i++)
{
System.out.print(i+"、");
int x=(int)(Math.random()*100);
System.out.print(x);
int operator=(int)(Math.random()*4+1);
if(operator==1)
{
System.out.print("+");
}
else if(operator==2)
{
System.out.print("-");
}
else if(operator==3)
{
System.out.print("*");
}
else if(operator==4)
{
System.out.print("/");
}
int y=(int)(Math.random()*100);
if(x<y)
{
int temp;
temp=x;
x=y;
y=temp;
}
System.out.println(y);
}
}
}
三、在“二”的基础上进行课堂测试2: 1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整。
package calculate;
import java.util.Random ;
import java.util.Scanner;
import java.lang.reflect.Array;
import java.util.LinkedList;
import java.util.List;
public class FourOperations1
{
public static void main(String[] ages)
{
while(1>0)
{
System.out.print("\n请选择要求:"
+"\n 是否有乘除法;(True/False)"
+"\n 是否有括号(最多可以支持十个数参与运算)(True/False);"
+"\n 数值范围(True(1~10)/False(1~100));"
+"\n 加减乘除有无负数(True/False);"
+"\n 除法有无余数(True/False);");
Scanner sc = new Scanner(System.in);
Boolean[] a=new Boolean[5];
for(int i=0;i<5;i++)
{
a[i]=sc.nextBoolean();
}
//sc.close();
System.out.println("请输入要出题的个数");
Scanner N = new Scanner(System.in);
int index=N.nextInt();
//N.close();
for(int ii=0;ii<index;ii++)
{
if(a[1]==false)
{
int a1=RandomNum(100),a2=RandomNum(100);
int sign=RandomNum(4);
if(sign==3&&a[4]==false)
{
a1=(a1%15)*(a2%10);
System.out.print("\n"+a1);
PrintSign(sign);
System.out.print(a2%10+" =");
continue;
}
if(a[0]==false)
{
if(a[3]==false)
{
if(a[2]==false)
{
System.out.print("\n"+a1);
PrintSign(sign%2);
System.out.print(a2+" =");
}
else if(a[2]==true)
{
System.out.print("\n"+a1%10);
PrintSign(sign%2);
System.out.print(a2+" =");
}
}
else if(a[3]==true)
{
int ssign=RandomNum(2);
if(ssign==0){
a1=-a1;
}
if(a[2]==false)
{
System.out.print("\n"+a1);
PrintSign(sign%2);
System.out.print(a2+" =");
}
else if(a[2]==true)
{
System.out.print("\n"+a1%10);
PrintSign(sign%2);
System.out.print(a2%10+" =");
}
}
}
else if(a[0]==true)
{
if(a[3]==false)
{
if(a[2]==false)
{
System.out.print("\n"+a1);
PrintSign(sign);
System.out.print(a2+" =");
}
else if(a[2]==true)
{
System.out.print("\n"+a1%10);
PrintSign(sign);
System.out.print(a2%10+" =");
}
}
else if(a[3]==true)
{
int ssign=RandomNum(2);
if(ssign==0){
a1=-a1;
}
if(a[2]==false)
{
System.out.print("\n"+a1);
PrintSign(sign);
System.out.print(a2+" =");
}
else if(a[2]==true)
{
System.out.print("\n"+a1%10);
PrintSign(sign);
System.out.print(a2%10+" =");
}
}
}
}
else if(a[1]==true)
{
int size=RandomNum(9);
int[] array=new int[size*2+4];
if(a[0]==false){
for(int i=0;i<=size;i++){
array[i]=RandomNum(2);
}
}
else if(a[0]==true){
for(int i=0;i<=size;i++){
array[i]=RandomNum(4);
}
}
if(a[2]==true){
for(int i=size+1;i<=size*2+2;i++){
array[i]=RandomNum(70)+4;
}
}
else if(a[2]==false){
for(int i=size+1;i<=size*2+2;i++){
array[i]=RandomNum(96)+4;
}
}
if(a[3]==true){
for(int i=size+1;i<=size*2+2;i++){
int ssign=RandomNum(2);
if(ssign==0){
array[i]=-array[i];
}
}
}
LinkedList<Node> nodeList = new LinkedList<Node>();
for(int nodeIndex=0;nodeIndex<array.length;nodeIndex++){
nodeList.add(new Node(array[nodeIndex]));
}
creatBinTree(array,nodeList);
Node root = nodeList.get(0);
inOrderTraverse(root);
System.out.println(" = ");
}
}
}
}
public static int RandomNum(int i)
{
Random a=new Random();
int a1=a.nextInt (i);
return a1;
}
public static void PrintSign(int sign)
{
if(sign==0){
System.out.print(" + ");
}
else if(sign==1){
System.out.print(" - ");
}
else if(sign==2){
System.out.print(" * ");
}
else if(sign==3){
System.out.print(" / ");
}
else
System.out.print(sign);
}
public static class Node
{
Node leftchild;
Node rightchild;
int data;
Node(int newData){
leftchild=null;
rightchild=null;
data=newData;
}
}
public static void creatBinTree(int array[],LinkedList<Node> nodeList){
for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){
nodeList.get(parentIndex).leftchild = nodeList
.get(parentIndex * 2 + 1);
nodeList.get(parentIndex).rightchild = nodeList
.get(parentIndex * 2 + 2);
}
}
public static void inOrderTraverse(Node node) {
if (node == null)
return;
if (node.leftchild != null) {
System.out.print("(");
}
inOrderTraverse(node.leftchild);
PrintSign(node.data );
inOrderTraverse(node.rightchild);
if (node.rightchild != null) {
System.out.print(")");
}
}
}
《JAVA语言》课问题汇总的更多相关文章
- 快乐编程大本营【java语言训练班】 6课:用java的对象和类编程
快乐编程大本营[java语言训练班] 6课:用java的对象和类编程 第1节. 什么是对象和类 第2节. 对象的属性和方法 第3节. 类的继承 第4节. 使用举例:创建类,定义方法,定义属性 第5节. ...
- 快乐编程大本营【java语言训练班】第5课: java的数组编程
快乐编程大本营[java语言训练班]第5课: java的数组编程 第1节. 声明数组变量 第2节. 创建数组对象 第3节. 访问数组元素 第4节. 修改数组元素 第5节. 多维数组 学习地址如下:ht ...
- 《快乐编程大本营》java语言训练班-第4课:java流程控制
<快乐编程大本营>java语言训练班-第4课:java流程控制 第1节. 顺序执行语句 第2节. 条件分支语句:if条件语句 第3节. 条件分支语句:switch 条件语句 第4节. 条件 ...
- 《快乐编程大本营》java语言训练班 2课:java的变量
<快乐编程大本营>java语言训练班 2课:java的变量 1变量介绍 2变量分类,数值变量 3变量分类-字符串变量 4变量分类-布尔变量 5变量分类-对象 http://code6g.c ...
- 【软考2】Java语言的基本知识汇总
导读:现在对于java这一模块,还没有相应的项目经验,只是通过各种类型的资料,对java有一个面上的了解.现在,对此做一个罗列总结,在以后的学习过程中,逐步完善! 一.语言的发展 1.1,机器语言 在 ...
- Java语言程序设计-助教篇
1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
- 20145205 java语言实现数据结构实验一
数据结构实验要求 综合类实验设计3 已知有一组数据a1a2a3a4--anb1b2b3b4--bm,其中ai均大于bj,但是a1到an和b1到bm不是有序的,试设计两到三个算法完成数据排序,且把bj数 ...
- Java语言基础
Java 语言是面向对象的程序设计语言,Java 程序的基本组成单元是类,类体中又包括属性与方法两部分.每一个应用程序都必须包含一个main()方法,含有main()方法的类成为主类. 一.Java ...
- JAVA语言学校的危险性
Java语言学校的危险性(译文) 作者: 阮一峰 日期: 2008年12月 7日 下面的文章是More Joel on Software一书的第8篇. 我觉得翻译难度很大,整整两个工作日,每天8小时以 ...
随机推荐
- 【Android Studio】 加载so文件异常
AS无法加载so包异常 android studio导入so包异常:Couldn't load DeviceAPI from loader dalvik.system.PathClassLoader[ ...
- JavaScript相等运算符
★相等运算符 相等运算符用来比较两个值是否相等 如果相等会返回true,否则返回false ㈠使用 == 来做相等运算 ⑴当使用 == 来比较两个值时,如果值的类型不同, 则会自动进行类型转换 ...
- Mac下Tomcat安装&配置&80默认端口设置
序言: 在学习Tomcat时, 部署虚拟服务主机时,遇到了无响应的情况.原以为是应为Tomcat默认端口8080在调整至(进行端口转发设置)默认端口80会和Mac自带Apache起冲突.但是也有同学使 ...
- shell中命令代换$()与`` 、 变量代换${} 、 整数运算$(( )) 的区别
命令代换$()与`` . 变量代换${} . 整数运算$(( )) 1.$( ) 与 ` ` (反引号) 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(comm ...
- 初次使用自己写的testbench 验证了简单的NOT门。
先是简单的非门模型: module notgate(a,b); input a; output b; assign b=~a; endmodule 下面是自己写的简陋的testbench: `time ...
- 堡垒机前戏——paramiko
提要:在写堡垒机之前,我们必须要了解paramiko这个第三方库.有关于python的第三方库的安装很简单,可以自行百度. 该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient 用于 ...
- HA 模式 Hadoop+ZooKeeper+Hbase启动顺序
一. 背景(原http://blog.csdn.net/u011414200/article/details/50437356 ,对其进行了一定更改) 1.1 网络上的大部分教程 都是机器间含有SSH ...
- JavaScript设计模式—适配器模式
适配器模式介绍 旧接口格式和使用者不兼容,中间加一个适配器转换接口 在生活中,我们有许多的适配器,例如iPhone7以后的耳机接口从3.5mm圆孔接口更改成为了苹果专属的 lightning接口.许多 ...
- 关于Linux上面无法读取资源目录下文件的问题
一开始我的代码是这样子的,读取本地子路径下的json文件 代码运行的时候,在window是可以正常的 @Override public String getBannerStr() { String s ...
- H5-Mui框架——修改mui.confirm样式
问题简述: 使用mui框架默认提示框时,感觉与整体布局不符,因此想要更改其中的样式. 首先,查了一下资料:mui.toast样式风格及位置修改教程 以下是转载过来的文章内容. ============ ...