2

芳香族数はARの形式で、各Aはアラビア数字、各Rはローマ数字です。

各ペアARは、以下に説明する値を提供し、これらの値を加算または減算することにより、芳香族数全体の値を取得します。アラビア数字Aは、0、1、2、3、4、5、6、7、8、または9です。ローマ数字Rは、7文字のI、V、X、L、C、D、またはMのいずれかです。 。各ローマ数字には基本値があります。


このプログラムは、同じライン(たとえば3Vのように入力)でAR値を取得し、それを乗算するように設計されています。3Vは3x5=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[]てプレーンを使用し、個々の文字をまたはStringで抽出することです。charAt()substring()

于 2013-02-26T01:35:32.297 に答える
1

stdin.readLine()コンソールからすべての文字を取得し、 にある文字列に格納しますx[0]。次に、最初の文字だけでなく、文字列全体から整数を解析しようとしています。これが、parseInt の呼び出しが失敗する理由です。代わりに、 を介して最初の文字で parseInt を呼び出しparseInt(x[0].substring(0,1))、文字列の 2 番目の文字を を介してデコード メソッドに渡しdecode(x[0].substring(1,2))ます。また、文字列の配列が必要ない場合は、使用しないでください。

于 2013-02-26T01:34:15.413 に答える
0

エラーが発生する理由:

ここでユーザー入力を読むとき

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

...芳香族数全体、たとえば4Vなどを読み取っており、それを配列の最初のインデックスに入れていますx。それで、

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

ここでは、の最初の要素を x整数として解析しようとします。しかし、芳香族数の整数部分をそこに置くだけでなく、すべてを入れます。Integerクラスは、数値とともに渡す文字文字を解析できないため、そこでNumberFormatExceptionが発生します。それで、

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

...の2番目の要素をdecodeメソッドに渡そうとしxますが、文字列全体をx [0]に配置するため、そこには何もありません。x [1]がnullであるため、これがNullFormatExceptionです。

それを修正するには:

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

または何でも。

于 2013-02-26T01:40:04.500 に答える
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 に答える