芳香族数字的形式为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);
}
}
答案 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));
或其他什么。