Java - 芳香数字 - 输入

时间:2013-02-26 01:28:27

标签: java arrays input

芳香族数字的形式为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]和单元格[1]中的R(数字)

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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分: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]为null。

要修复它:

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

或其他什么。