20155322 《Java程序设计》课堂实践项目MyOD

实践要求

  • 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能

  • 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接。

实践内容

通过对课本305页和306页两个代码的理解,我写出了实现老师要求的代码

老师要求要和Linux下od -tx -tc XXX的功能的输出格式一模一样,于是我修改了我的代码:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; /**
* Created by mac on 2017/5/31.
*/
public class MyOD {
public static void main(String[] args) throws IOException {
MyOD.dump(
new FileInputStream(args[0])
);
} public static void dump(InputStream src)
throws IOException {
try (InputStream input = src) {
byte[] buf = new byte[50];
int k = input.read(buf, 0, buf.length); //读取100byte
//System.out.println(new String(buf)); 将这100byte打印出来,测试 int[] in = new int[buf.length]; //新建数组,储存其ASCII码值
for (int i = 0; i < in.length; i++) { //将byte的8位于1111_1111与
in[i] = buf[i]&0xff; //得到ASCII码值
} int flat = 0,temp = 0,j = 0; //状态控制变量flag,循环控制变量temp,j do {
if(flat == 0) {
while(temp < buf.length) {
if(buf[temp] != 0 ) { //如果有数据则打印
System.out.printf("%c ",buf[temp]);
temp++;
if(temp%16 == 0 && temp!=0){ //如果打印了16个就换行,flat置1
System.out.println(); //换行,并跳出循环,进行ASCII数组的输出
flat = 1;
break;
}
}
else {
flat = 3; //遍历完毕,flat置3,跳出do-while循环
j++;
}
}
}
else if(flat == 1) {
while(j < in.length) {
if(in[j]!=0) {
System.out.printf(Integer.toString(in[j], 0x10));
System.out.printf(" ");
j++;
if(j%16 == 0 && j!=0) { //如果打印了16个就换行,flat置0
System.out.println(); //换行,跳出循环,换到byte输出
flat = 0;
break;
}
}
else {
flat = 3; //遍历完毕,flat置3,跳出do-while循环
j++;
}
}
}
else System.out.println("wrong!");
if(flat == 3) break; //flat为3,跳出do-while循环
}while(flat == 0 || flat == 1); }
System.out.println();
}
}

运行之后出现了这样的问题:

  • 我发现问题出现的原因是因为下面这个else没有进行break跳出,导致一直在flag=0状态中死循环,程序无法结束。
                        else {
flat = 3; //遍历完毕,flat置3,跳出do-while循环
j++;
  • 于是我进行了修改,将flat置1,使程序跳出循环后进入flat=1中进行ASCII码的输出,然后结束程序。
                      else {
System.out.println(); //buf[]遍历结束就转到ASCII把剩下的输出了
flat = 1;
break;
}
  • 修改了代码并完善了注释后的程序完整代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; /**
* Created by mac on 2017/5/31.
*/
public class MyOD {
public static void main(String[] args) throws IOException {
MyOD.dump(
new FileInputStream(args[0])
);
} public static void dump(InputStream src)
throws IOException {
try (InputStream input = src) {
byte[] buf = new byte[50];
int k = input.read(buf, 0, buf.length); //读取100byte
//System.out.println(new String(buf)); 将这100byte打印出来,测试 int[] in = new int[buf.length]; //新建数组,储存其ASCII码值
for (int i = 0; i < in.length; i++) { //将byte的8位于1111_1111与
in[i] = buf[i]&0xff; //得到ASCII码值
} int flat = 0,temp = 0,j = 0; //状态控制变量flag,循环控制变量temp,j do {
if(flat == 0) {
while(temp < buf.length) {
if(buf[temp] != 0 && buf[temp] != 10) { //如果有数据,并且不是换行则打印
System.out.printf("%c ",buf[temp]);
temp++;
if(temp%16 == 0 && temp!=0){ //如果打印了16个就换行,flat置1,换到ASCII输出
System.out.println();
flat = 1;
break;
}
}
else {
System.out.println(); //buf[]遍历结束就转到ASCII把剩下的输出了
flat = 1;
break;
}
}
}
else if(flat == 1) {
while(j < in.length) {
if(in[j]!=0 && in[j] != 10) { //如果有数据,并且不是换行则打印
System.out.printf(Integer.toString(in[j], 0x10));
System.out.printf(" ");
j++;
if(j%16 == 0 && j!=0) { //如果打印了16个就换行,flat置0,换到BYTE输出
System.out.println();
flat = 0;
break;
}
}
else {
flat = 3; //所有的数据输出完毕,flat置3,跳出大循环,结束程序
break;
}
}
}
else System.out.println("wrong!");
if(flat == 3) break;
}while(flat == 0 || flat == 1); //只要flat不为3,继续循环 }
}
}
  • 我使用的输入文本内容为:
abcdeafjkdhoahgweuiiughwjndknagjhgfuqiut

最后实现效果如图(图一为第一次的效果,图二为修改后的效果):

链接

20155322 《Java程序设计》课堂实践项目MyOD的更多相关文章

  1. 20155307 《Java程序设计》课堂实践项目MyOD

    一开始没理解老师的要求,交的截图是错误的. import java.io.FileInputStream; import java.io.IOException; import java.io.Inp ...

  2. 20155322 《Java程序设计》课堂实践项目 数据库-3-4

    20155322 <Java程序设计>课堂实践项目 数据库-3-4 数据库-3 实践要求 参考教材代码完成下面的要求,提交能连接到world的截图(有学号水印),并提交代码的码云链接.查询 ...

  3. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  4. 《Java 程序设计》课堂实践项目汇总链接

    1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...

  5. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  6. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

  7. 《Java 程序设计》课堂实践项目-Arrays和String单元测试

    <Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...

  8. 20155308 2016-2017-2《Java程序设计》课堂实践项目

    20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...

  9. # 20155308 2016-2017-2《Java程序设计》课堂实践项目 5月17日

    20155308 2016-2017-2<Java程序设计>课堂实践项目 5/17 本次因为git出现了问题,所以没有按时提交我的代码 问题一 在IDEA中对P145 MathTool.j ...

随机推荐

  1. 深入理解php中的ini配置(2)

    继续接着上一篇写. 运行时改变配置 在前一篇中曾经谈到,ini_set函数可以在php执行的过程中,动态修改php的部分配置.注意,仅仅是部分,并非所有的配置都可以动态修改.关于ini配置的可修改性, ...

  2. python面向对象之类成员修饰符

      类的所有成员分为: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能访问 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线.(特殊成员除外,例如:__init__.__c ...

  3. 6、Python文件操作工具 openpyxl 工具

    #-*- coding:utf-8 -* from  openpyxl.reader.excel  import  load_workbook import  MySQLdb import  time ...

  4. vue实现点击目标元素外页面的其他地方隐藏弹窗。

    方法: 步骤1:给页面最外出的元素div加点击事件:@click=“popShow = false”. 步骤2:给点击目标元素加点击事件:@click=“popShow = true”. 备注:pop ...

  5. 安装TA-Lib时报错:ubuntu****, Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='

    使用pip install TA-Lib 时报错: ERROR: Complete output from command /usr/bin/python3 -u -c 'import setupto ...

  6. 笔试面试之C++

    7 类B是类A的公有派生类, 类A和类B中都定义了虚函数func(), p 是一个指向类A对象的指针,则p->A::func()将() A 调用类A中的函数 B 调用类B中的函数 C 根据p所指 ...

  7. leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST

    1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...

  8. windows系统安装erlang

    1.什么是erlang erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境.Erlang是一个结构 ...

  9. disconf实践(三)基于XML的分布式配置文件管理,自动reload

    上一篇介绍了基于xml的非自动reload的分布式配置文件管理,这一篇介绍自动reload的方式(基于disconf实践二). 1. 修改RedisConfig.java package org.sp ...

  10. JNI由浅入深_6_简单对象的应用

    1.声明native方法 public class ComplexObject { /** * 返回一个对象数组 * @param val * @return */ public native Per ...