Java日常学习:运用链栈实现进制转换

2023-05-16

一、简单介绍

        今天我就给大家带来java中的链栈实现进制转换的方法,该方法也是在学习栈的时候发现的,我们都知道在进制转换的时候有很多种方法,其中最常用也最容易理解的就是除基倒取余法,那么我们先来说说其原理构成。

        以转二进制为例,输入一个数n,每次用n除以2,把余数记下来,再用商去除以2......依次循环。直到商为0时结束,然后把余数倒着排列,就构成了转换后的二进制数,同样的道理,十进制转八进制、十六进制等。(这里少写了个0,最后换算结果是10001)

 

二、实现原理

        java顺序栈只允许在一端进行插入、删除和出栈,只允许操作的一段称为栈顶,另一端称为栈尾,运用这个特性我们可以知道,栈内元素是遵循先入后出,后入先出的原则,所以将依次计算的余数入栈,最后依次出栈,即可完成进制转换。

三、下面创建java顺序栈的代码

        1.创建一个SStack接口,添加判空isEmpty(),出栈puch(),入栈pop()方法。

public interface SStack<E> {

    public boolean isEmpty();

    public boolean push(E isEmpty);
    
    public E pop();

}

        ·2.创建一个 Node类,设置指针域和数据域。

public class Node<E> {
	public E data;               
    public Node<E> next;
    public Node(E data,Node<E> node)
    {
        this.data = data;
        this.next = node;
    }
    public Node(E data)
    {
        this(data,null); 
    }
    public Node()
    {
        this(null,null);
    }

}

         3.创建LinkedStackl类继承SStack接口,并实现未实现的方法。

public class LinkedStack<E> implements SStack<E> {

    private Node<E> top;//栈顶指针
        
    public boolean isEmpty() {
        return this.top == null?true:false;
    }
    @Override
    public boolean push(E element) {
        boolean flag = false;
        if (element != null){
            this.top = new Node<E>(element,this.top);
            flag = true;
        }
        return flag;
    }
    @Override
    public E pop() {
        E poped = null;
        if (! this.isEmpty()){
            poped = this.top.data;
            this.top = this.top.next;
        }
        return poped;
    } 
}

         4.创建测试类ConvertNumber,num为传入换算参数,创建workStack工作栈,运用resStr接收出栈元素,最后返回。

public class ConvertNumber {
    //转二进制
    private static String toBinary(int num) {
        StringBuffer resStr = new StringBuffer();
        SStack<String> workStack = new LinkedStack<String>();
        String str = "";
        for (int i = num;i > 0;i/=2){
            str = i % 2+str;
            workStack.push(str);
        }
        resStr.append(workStack.pop());
       return resStr.toString(); 
    }
    //转八进制
    private static String toHex(int num) {
        StringBuffer resStr = new StringBuffer();
        SStack<String> workStack = new LinkedStack<String>();
        String str = "";
        for (int i = num;i > 0;i/=8){
            str = i % 8+str;
            workStack.push(str);
        }
        resStr.append(workStack.pop());
       return resStr.toString();
    }
    //转十六进制
     private static String toOctonary(int num) {
        StringBuffer resStr = new StringBuffer();
        SStack<String> workStack = new LinkedStack<String>();
        String str = "";
        for (int i = num;i > 0;i/=16){
            str = i % 16+str;
            workStack.push(str);
        }
        resStr.append(workStack.pop());
       return resStr.toString();
    }
 public static void main(String[] args) {
        System.out.println(toBinary(17));
        System.out.println(toHex(17));
        System.out.println(toOctonary(17));
    }
}

         5.测试结果

 总体来说也是一个很不错的学习实用点,当然也会有更方便的方式来进行进制换算,以上文章仅仅用于分享,这也是本人第一次发文章请各位读者大大点个赞支持哦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java日常学习:运用链栈实现进制转换 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐