2

ローマ数字をキーとして、その 10 進数を値として格納するハッシュマップを作成しました。エラーには、「互換性のない型 - java.lang.Object が見つかりましたが、int が必要です」と表示されます。「conversions.get(numOne.charAt(x));」と書いたときにローマ数字の値を取得しようとしているだけです。ここで何が間違っていますか?

    import java.util.Scanner;
    import java.util.HashMap;

    public class test
    {
        static Scanner sc = new Scanner(System.in);
        static HashMap conversions = new HashMap();
        public static void main(String args[]){
            conversions.put('I',1);
            conversions.put('V',5);
            conversions.put('X',10);
            conversions.put('L',50);
            conversions.put('C',100);
            conversions.put('D',500);
            conversions.put('M',1000);

            String numOne = "XIX";

            for(int x = 0; x <= numOne.length()-2; x++){
                int temp1 = conversions.get(numOne.charAt(x));
                int temp2 = conversions.get(numOne.charAt(x+1));
            }
        }
    }
4

5 に答える 5

5

行を変更します。

static HashMap conversions = new HashMap();

static Map<Character,Integer> conversions = new HashMap<Character,Integer>();

またはJava 7の時点では、次のことを行うことで重複を回避できます

static Map<Character,Integer> conversions = new HashMap<>();

全体として、これによりプリミティブが自動ボックス化され、問題が解決されます

于 2013-10-07T16:58:26.453 に答える
1

ジェネリックを適切に使用することで、Java に何HashMapを含める必要があるかを伝えることができます。

static HashMap<Character,Integer> conversions = new HashMap<>();

conversions.get()これにより、コンパイラは が を返すことを認識するため、コードがコンパイルされます (また、自動アンボックスInteger化によって に自動的に変換されます)。int

Java 7 より前は、初期化のために型を繰り返す必要があり、new HashMap<Character,Integer>().

于 2013-10-07T16:58:55.873 に答える
0
for(int x = 0; x <= numOne.length()-2; x++){
                int temp1 = (Integer) conversions.get(numOne.charAt(x));
                int temp2 = (Integer) conversions.get(numOne.charAt(x+1));
                System.out.println(temp1 + "   "+temp2);

これを使用して、出力は -

10 1 1 10

于 2013-10-07T17:09:01.930 に答える
0

値をオブジェクトにキャストする必要があります。他の人がすでに使用を提案しているように

for(int x = 0; x <= numOne.length()-2; x++){
    int temp1 = (Integer) conversions.get(numOne.charAt(x));
    int temp2 = (Integer) conversions.get(numOne.charAt(x+1));
}

これにより、次のようにハッシュマップを宣言することもお勧めします

static Map<String, Integer> conversions = new HashMap<String, Integer>();
于 2013-10-07T16:59:46.093 に答える
0

HashMap はオブジェクトを格納して返します。オブジェクトをプリミティブに直接割り当てることはできません。

 int temp1 = conversions.get(numOne.charAt(x));
 int temp2 = conversions.get(numOne.charAt(x+1));

代わりにこれを試してください:

int temp1 = (Integer) conversions.get(numOne.charAt(x));
int temp2 = (Integer) conversions.get(numOne.charAt(x+1));

または、パラメーター化された Map を使用して、オブジェクトの取得中のキャストを回避することをお勧めします。

static HashMap<Character, Integer> conversions = new HashMap<Character, Integer>();
于 2013-10-07T16:55:48.170 に答える