2

芳香数的形式为 AR,其中每个 A 是阿拉伯数字,每个 R 是罗马数字。

每对 AR 贡献一个如下所述的值,通过将这些值相加或相减,我们得到整个芳香数的值。阿拉伯数字 A 可以是 0、1、2、3、4、5、6、7、8 或 9。罗马数字 R 是七个字母 I、V、X、L、C、D 或 M 之一. 每个罗马数字都有一个基值:


该程序旨在获取同一行上的 AR 值(例如 3V 输入),并将其相乘。3V 将是 3 x 5 = 15。因为 V 是 5。

我的问题是我不能接受用户输入的内容并将整数乘以字符串。这使它变得乏味。我尝试将字符串转换为 int 但程序给了我一个nullformatException

A也将在第一个单元格[0]中,R(数字)在单元格[1]中

import java.io.*;
import java.util.*;
import java.text.*;

public class AromaticNumerals
{
    public static int decode (String x)  // since input is direct the program doesnt require validation
    {
        if (x.equals ("I"))
            return 1;
        else if (x.equals ("V"))
            return 5;
        else if (x.equals ("X"))
            return 10;
        else if (x.equals ("L"))
            return 50;
        else if (x.equals ("C"))
            return 100;
        else if (x.equals ("D"))
            return 500;
        else
            return 1000;
    }



    public static void main (String str[])
        throws IOException
    {
        BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));

        int Output;

        int MAX = 20;
        String[] x = new String [MAX]; // by picking an array we can separate the A-R

        System.out.println ("Please input an aromatic number. (AR)");

        x [0] = (stdin.readLine ());


        int y = Integer.parseInt (x [0]);

        Output = ( y * decode (x [1]));


        System.out.println (Output);

    }
}
4

4 回答 4

3
    int MAX = 20;
    String[] x = new String [MAX]; // by picking an array we can separate the A-R

不正确。您的所有输入都将进入数组的第一个元素x[0]. 您将字符串数组与字符数组混淆了。最简单的解决方案是消除String[]并使用普通字符,然后使用orString提取单个字符。charAt()substring()

于 2013-02-26T01:35:32.297 回答
1

stdin.readLine()将从控制台获取所有字符并将它们存储在找到的字符串中x[0]。然后,您尝试从完整字符串中解析一个整数,而不仅仅是第一个字符,这就是您对 parseInt 的调用失败的原因。相反,在第一个字符 via 上调用 parseIntparseInt(x[0].substring(0,1))并将字符串的第二个字符传递给 decode 方法 via decode(x[0].substring(1,2))。此外,如果您不需要字符串数组,请不要使用一个。

于 2013-02-26T01:34:15.413 回答
0

你是偶然来自C背景的吗?或者任何其他语言,其中字符串是指向字符数组第一个元素的指针?Java 在这方面的工作方式不同,Java 字符串是第一类对象,因此x [0] = (stdin.readLine ());将整行读入第一个字符串,因此int y = Integer.parseInt (x [0]);将尝试解析 A 和 R。相反,您可能想要x[0].charAt(0)x[0].charAt(1),您也可以不需要 x 是一个数组。

于 2013-02-26T01:38:57.993 回答
0

为什么会出现错误:

当您在此处阅读用户输入时

x [0] = (stdin.readLine ());

...您正在阅读整个芳香数,例如 4V 或其他什么,并且您将其放在数组的第一个索引中x。然后,

int y = Integer.parseInt (x [0]);

在这里,您尝试将的第一个元素 x解析为整数。但是你不只是把芳香数的整数部分放在那里,你把整个东西放在那里。您将在那里获得 NumberFormatException,因为 Integer 类无法解析您与数字一起传递的字母字符。然后,

Output = ( y * decode (x [1]));

...您尝试将第二个元素传递x给 decode 方法,但那里什么也没有,因为您将整个字符串放在 x[0] 中。那是您的 NullFormatException,因为 x[1] 为空。

要解决这个问题:

String line = stdin.readLine();
int y = Integer.parseInt(line.charAt(0));
int output = y * decode(line.charAt(1));

管他呢。

于 2013-02-26T01:40:04.500 回答