罗马数字到数字的转换[重复]

2023-12-02

尝试编写程序来读取表示罗马数字的字符串(来自用户输入),然后将其转换为阿拉伯形式(整数)。例如,I = 1、V = 5、X = 10 等。

基本上,采用 String 类型参数的构造函数必须将字符串(来自用户输入)解释为罗马数字并将其转换为相应的 int 值。

除了以下正在进行中的方法(尚未编译)之外,是否还有更简单的方法来解决此问题:

import java.util.Scanner;

public class RomInt {
String roman;
int val;
void assign(String k)
{
  roman=k;
}

private class Literal
{
    public char literal;
    public int value;

    public Literal(char literal, int value)
    {
        this.literal = literal;
        this.value = value;
    }
}

private final Literal[] ROMAN_LITERALS = new Literal[]
        {
                new Literal('I', 1),
                new Literal('V', 5),
                new Literal('X', 10),
                new Literal('L', 50),
                new Literal('C', 100),
                new Literal('D', 500),
                new Literal('M', 1000)
        };

public int getVal(String s) {

   int holdValue=0;

        for (int j = 0; j < ROMAN_LITERALS.length; j++)
        {
            if (s.charAt(0)==ROMAN_LITERALS[j].literal)
            {
                       holdValue=ROMAN_LITERALS[j].value;
                           break;
            }  //if()
        }//for()

  return holdValue;
}  //getVal()
public int count()
{
   int count=0;
   int countA=0;
   int countB=0;
   int lastPosition = 0;
    for(int i = 0 ; i < roman.length(); i++)
    {
      String s1 = roman.substring(i,i+1);
        int a=getVal(s1);
        countA+=a;
    }
    for(int j=1;j<roman.length();j++)
    {
        String s2=  roman.substring(j,j+1);
        String s3=  roman.substring(j-1,j);
        int b=getVal(s2);
        int c=getVal(s3);
        if(b>c)
        {
            countB+=c;
        }
    }
    count=countA-(2*countB);
    return count;
    }


void disp()
{

     int result=count();
    System.out.println("Integer equivalent of "+roman+" = " +result);
}


  public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.print("Please enter Roman Symbol:");
String s = keyboard.nextLine();
RomInt();

}

}  

罗马数字/解码示例:

class Roman {

    private static int decodeSingle(char letter) {
        switch (letter) {
            case 'M':
                return 1000;
            case 'D':
                return 500;
            case 'C':
                return 100;
            case 'L':
                return 50;
            case 'X':
                return 10;
            case 'V':
                return 5;
            case 'I':
                return 1;
            default:
                return 0;
        }
    }

    public static int decode(String roman) {
        int result = 0;
        String uRoman = roman.toUpperCase(); //case-insensitive
        for (int i = 0; i < uRoman.length() - 1; i++) {//loop over all but the last character
            if (decodeSingle(uRoman.charAt(i)) < decodeSingle(uRoman.charAt(i + 1))) {
                result -= decodeSingle(uRoman.charAt(i));
            } else {
                result += decodeSingle(uRoman.charAt(i));
            }
        }
        result += decodeSingle(uRoman.charAt(uRoman.length() - 1));
        return result;
    }

    public static void main(String[] args) {
        System.out.println(decode("MCMXC")); //1990
        System.out.println(decode("MMVIII")); //2008
        System.out.println(decode("MDCLXVI")); //1666
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

罗马数字到数字的转换[重复] 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 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 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 如何将双精度/浮点四舍五入为二进制精度?

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

随机推荐

  • 从谷歌地图获取路线和地图上每2公里的点

    我知道 GPS 坐标我的起点和终点 现在我想知道这次旅行的行车路线 然后获取这条路线上每2公里的GPS坐标 我怎样才能用 php javascript 做到这一点 Thanks 添加的代码
  • html 输出中的特殊字符

    我希望直接打印像 这样的字符 但在源代码中 显示为 248 如果输出通过Html Encode 它不会呈现正确的字符 但是 248 在我的配置中
  • 从 Windows 注册表启动时启动应用程序时,返回 ClickOnce 版本不起作用

    我正在使用以下代码System Deployment返回我的 NET 3 5 C 应用程序的 ClickOnce 版本 public string version get System Reflection Assembly assembl
  • 如何用SQL导出全文文件?

    有将全文字段导入 导出为文件的简单方法 解决 加载为多行 的问题 尝试使用 SQLCOPY我只能将完整文件转换为完整表格 而不能转换为单个文本字段 因为 COPY 中的每一行都是原始的 解决了保存回问题 将完整的 XML 文件保存在文件系统
  • python:哪个文件更新以及更新了多少时间

    我正在尝试创建一个文件日期比较例程 我怀疑以下是一种相当笨拙的方法 我在查找有关 timedelta 的属性或方法或它们的名称的信息时遇到了一些困难 因此 我仅以天 分钟和秒来测量下面的日期时间差异 并且没有代表年份的列表项 任何替代方案的
  • 更改 Mac OS X 上的 docker 存储驱动程序

    我在 Mac OS X 上安装了 docker 工具箱 我需要将 docker 存储驱动程序从aufs to 设备映射器 因为aufs造成问题 我找到了docker官方文档并按照解释的方式尝试了here but DOCKER OPTS st
  • 我的 jQuery 无法与 IE11 配合使用

    所以我得到了三段代码来将东西加载到 div 中并做其他事情 但它不适用于 Internet Explorer 我检查了 IE11 控制台 这就是我得到的 SCRIPT5009 is undefined 这很奇怪 在其他所有浏览器中它都工作正
  • 以编程方式设置角度 5 ng-select 中的选定值

    我正在使用 angular5 ng select 组件 https github com ng select ng select并尝试设置选定值 以编程方式 当容器组件首次加载时 模型中设置的默认选择值 我没有找到它或的任何相关属性已选择对
  • configmap 更改不会自动反映在各个 pod 上

    apiVersion apps v1 for versions before 1 8 0 use apps v1beta1 kind Deployment metadata name consoleservice1 spec selecto
  • 如何在python中从ffmpeg流中提取视频和音频

    我想从 ffmpeg 流中获取单独的视频和单独的音频对象 python 为此 我在我的树莓派上运行它 ffmpeg f alsa thread queue size 1024 channels 1 i hw 2 0 thread queue
  • 当高度为 100% 时,IE 10 会出现显示表格 CSS 的 bug?

    我已经尝试了 3 天来避免在我的新响应式设计中使用表格 主要是因为每个人都说它们是邪恶的 另一方面 在对 SEO 和表格进行更多研究时 有些人甚至说这提高了他们的知名度 无论如何 div 和 HTML5 的语义要好得多 所以我真的很想让下面
  • Python地址下载

    下面的代码返回none 我该如何修复它 我正在使用Python 2 6 import urllib URL http download finance yahoo com d quotes csv s s f sl1t1v e csv sy
  • Objective C 方法签名可以指定枚举类型吗?

    VoiceName 是一个枚举 声明如下 enum VoiceName PAD RHYTHM PAD RHYTHM2 PAD RHYTHM3 PEEPERS ATMOSPHERE IMPULSE FAST PULSE HAIRYBALLS
  • Boost python 包装虚拟方法

    我正在使用 boost python 创建与 c 库的绑定 该库中的许多类都具有接受 iterator const iterator 类型作为参数的虚拟方法 我并不是特别想公开这些类型 但更愿意围绕这些虚拟方法创建一些包装器来接受适当的容器
  • webkit 上浮动 div 后“overflow:hidden”div 的边距行为

    我发现 float left div 后面的 overflow hidden div 的右侧边距加倍 可以使用以下代码进行测试
  • 如何获取 PyQt 中 QGroupbox 内存在的 Qcheckbox 的状态

    我的项目包含具有多个 QGroupbox 的 Qdialog 每个 GroupBox 包含一定数量的复选框 所有组框的复选框列表都是相同的 我没有太多声誉来加载图像 在这里 用户可以根据自己的需要选择复选框并按下 确定 按钮 按下 确定 按
  • 当我们告诉 PDO 不要这样做时,为什么它会生成警告?

    Problem 我们告诉 PDO 将每个问题包装到异常中 在某些情况下 它会生成一些警告 然后才抛出异常 Why它能做到吗 重复 SO 上没有关于它的正确答案 最后一个问题是MySQL 上的 PHP PDO 异常 警告消失了 但人们只是将其
  • 在Mysql中将数字转换为单词

    我正在从数据库中获取一个值 我希望将该值转换为一个单词Mysql 有人可以帮我吗 Eg 123 gt 这个值是从数据库获取的 它以数字形式保存 我想检索这个值一百二十三从数据库中 这样做的语法是什么 查询是这样的 select value
  • Session_Start 在默认 ASP.NET MVC3 项目上多次触发

    我想我可能发现了 ASP NET MVC 及其事件管道的问题 特别是 我发现 Session Start 被多次调用 每次都包含一个新的 SessionID 以下是分步过程 打开VS2010 文件 新项目 ASP NET MVC 3 Web
  • 罗马数字到数字的转换[重复]

    这个问题在这里已经有答案了 尝试编写程序来读取表示罗马数字的字符串 来自用户输入 然后将其转换为阿拉伯形式 整数 例如 I 1 V 5 X 10 等 基本上 采用 String 类型参数的构造函数必须将字符串 来自用户输入 解释为罗马数字并