Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java罗马到整数:空指针_Java - Fatal编程技术网

Java罗马到整数:空指针

Java罗马到整数:空指针,java,Java,有人知道我的指针(值)有什么问题吗? 线程“main”java.lang.NullPointerException中出现异常 我的节目: import java.util.LinkedHashMap; public class Solution { private static LinkedHashMap<String, Integer> romanToNum = new LinkedHashMap<String, Integer>(); static

有人知道我的指针(值)有什么问题吗? 线程“main”java.lang.NullPointerException中出现异常 我的节目:

import java.util.LinkedHashMap;

public class Solution {
    private static LinkedHashMap<String, Integer> romanToNum = new LinkedHashMap<String, Integer>(); 
    static{
        romanToNum.put("M", 1000);
        romanToNum.put("D", 500);
        romanToNum.put("C", 100);
        romanToNum.put("L", 50);
        romanToNum.put("X", 10);
        romanToNum.put("V", 5);
        romanToNum.put("I", 1);
    }
    public int romanToInt(String s) {
        int sum = 0;
        char prev = '#';
        for(int i = s.length()-1; i >= 0; i--){
            char ch = s.charAt(i);
            ***int value = romanToNum.get(ch);***
            if(value < sum && ch != prev){
                sum -= value;
            }else{
                sum += value;
            }
            prev = ch;
        }
        return sum;
    }
}
import java.util.LinkedHashMap;
公共类解决方案{
私有静态LinkedHashMap romanToNum=新LinkedHashMap();
静止的{
罗曼托努姆.普特(“M”,1000);
罗曼托努.普特(“D”,500);
罗曼托努姆.普特(“C”,100);
罗曼托努姆.普特(“L”,50);
罗曼托努姆.普特(“X”,10);
罗曼托努姆.普特(“V”,5);
罗曼托努姆.普特(“I”,1);
}
公共int-romanToInt(字符串s){
整数和=0;
char prev='#';
对于(int i=s.length()-1;i>=0;i--){
char ch=s.charAt(i);
***int值=romantonim.get(ch)***
if(值
您的映射类型为
,但您正在使用
字符
原语作为键(用于查找):

这些将自动装箱到与
String
s不兼容的
Character
对象。因此,正如其他人所注意到的,您的映射返回一个null
整数
,该整数自动取消绑定到一个基元
int
,正是这个操作导致NPE被抛出

解决方案1:将地图改为
类型

解决方案2:将违规行更改为:

***int value = romanToNum.get(String.valueOf(ch));***

您的映射类型为
,但您正在使用
char
原语作为键(用于查找):

这些将自动装箱到与
String
s不兼容的
Character
对象。因此,正如其他人所注意到的,您的映射返回一个null
整数
,该整数自动取消绑定到一个基元
int
,正是这个操作导致NPE被抛出

解决方案1:将地图改为
类型

解决方案2:将违规行更改为:

***int value = romanToNum.get(String.valueOf(ch));***

问题是您正在使用
字符
调用get,该字符自动装箱为
字符

char ch = s.charAt(i);
int value = romanToNum.get(ch);

由于没有使用
字符
键实际存储数据,因此会返回
null
。正如其他人所指出的,
null
整数
会自动取消绑定到
int
,从而导致
空点异常
问题是,您正在使用
字符
调用get,该字符会自动绑定到
字符

char ch = s.charAt(i);
int value = romanToNum.get(ch);

由于没有使用
字符
键实际存储数据,因此会返回
null
。正如其他人所指出的,
null
整数
自动取消绑定为
int
,导致
NullPointerException
正如我的映射一样,我使用char作为键。使用字符串而不是字符: String str=String.valueOf(ch)

NullPointerException通常有两种方法: 1.无初始化
2.使用空值进行比较、计算和传输。

正如我的映射一样,我使用char作为键。使用字符串而不是字符: String str=String.valueOf(ch)

NullPointerException通常有两种方法: 1.无初始化 2.使用空值进行比较、计算和传输。

导入java.util.*

公共类Roman_到_整数{

public String getRomanValue(String x) {
    String str[] = new String[12];
    str[0] = x.replaceAll("IIIII", "V");
    str[1] = str[0].replaceAll("IIII", "IV");
    str[2] = str[1].replaceAll("VV", "X");
    str[3] = str[2].replaceAll("VIV", "IX");
    str[4] = str[3].replaceAll("XXXXX", "L");
    str[5] = str[4].replaceAll("XXXX", "XL");
    str[6] = str[5].replaceAll("LL", "C");
    str[7] = str[6].replaceAll("LXL", "XC");
    str[8] = str[7].replaceAll("CCCCC", "D");
    str[9] = str[8].replaceAll("CCCC", "CD");
    str[10] = str[9].replaceAll("DD", "M");
    str[11] = str[10].replaceAll("DCD", "CM");

    return str[11];
}

public static void main(String args[]) {
    Scanner in = new Scanner(System.in);
    Roman_to_Integer obj = new Roman_to_Integer();
    String Temp = "";
    System.out.print("Enter The Number : ");
    int Num = in.nextInt();
    for(int i = 1 ; i <= Num ; i++) {
        Temp = Temp + "I";
    }

    String Roman = obj.getRomanValue(Temp);

    System.out.print("The Roman Value Of "+Num+" is "+Roman);
}
公共字符串getRomanValue(字符串x){
字符串str[]=新字符串[12];
str[0]=x.replaceAll(“IIIII”、“V”);
str[1]=str[0].replaceAll(“IIII”、“IV”);
str[2]=str[1].replaceAll(“VV”,“X”);
str[3]=str[2].replaceAll(“VIV”、“IX”);
str[4]=str[3].replaceAll(“XXXXX”,“L”);
str[5]=str[4].replaceAll(“XXXX”,“XL”);
str[6]=str[5].replaceAll(“LL”,“C”);
str[7]=str[6].replaceAll(“LXL”、“XC”);
str[8]=str[7].replaceAll(“CCCCC”,“D”);
str[9]=str[8].replaceAll(“CCCC”、“CD”);
str[10]=str[9].replaceAll(“DD”,“M”);
str[11]=str[10].replaceAll(“DCD”、“CM”);
返回str[11];
}
公共静态void main(字符串参数[]){
扫描仪输入=新扫描仪(系统输入);
Roman_to_Integer obj=新的Roman_to_Integer();
字符串Temp=“”;
系统输出打印(“输入号码:”);
int Num=in.nextInt();
对于(inti=1;iimportjava.util.*

公共类Roman_到_整数{

public String getRomanValue(String x) {
    String str[] = new String[12];
    str[0] = x.replaceAll("IIIII", "V");
    str[1] = str[0].replaceAll("IIII", "IV");
    str[2] = str[1].replaceAll("VV", "X");
    str[3] = str[2].replaceAll("VIV", "IX");
    str[4] = str[3].replaceAll("XXXXX", "L");
    str[5] = str[4].replaceAll("XXXX", "XL");
    str[6] = str[5].replaceAll("LL", "C");
    str[7] = str[6].replaceAll("LXL", "XC");
    str[8] = str[7].replaceAll("CCCCC", "D");
    str[9] = str[8].replaceAll("CCCC", "CD");
    str[10] = str[9].replaceAll("DD", "M");
    str[11] = str[10].replaceAll("DCD", "CM");

    return str[11];
}

public static void main(String args[]) {
    Scanner in = new Scanner(System.in);
    Roman_to_Integer obj = new Roman_to_Integer();
    String Temp = "";
    System.out.print("Enter The Number : ");
    int Num = in.nextInt();
    for(int i = 1 ; i <= Num ; i++) {
        Temp = Temp + "I";
    }

    String Roman = obj.getRomanValue(Temp);

    System.out.print("The Roman Value Of "+Num+" is "+Roman);
}
公共字符串getRomanValue(字符串x){
字符串str[]=新字符串[12];
str[0]=x.replaceAll(“IIIII”、“V”);
str[1]=str[0].replaceAll(“IIII”、“IV”);
str[2]=str[1].replaceAll(“VV”,“X”);
str[3]=str[2].replaceAll(“VIV”、“IX”);
str[4]=str[3].replaceAll(“XXXXX”,“L”);
str[5]=str[4].replaceAll(“XXXX”,“XL”);
str[6]=str[5].replaceAll(“LL”,“C”);
str[7]=str[6].replaceAll(“LXL”、“XC”);
str[8]=str[7].replaceAll(“CCCCC”,“D”);
str[9]=str[8].replaceAll(“CCCC”、“CD”);
str[10]=str[9].replaceAll(“DD”,“M”);
str[11]=str[10].replaceAll(“DCD”、“CM”);
返回str[11];
}
公共静态void main(字符串参数[]){
扫描仪输入=新扫描仪(系统输入);
Roman_to_Integer obj=新的Roman_to_Integer();
字符串Temp=“”;
系统输出打印(“输入号码:”);
int Num=in.nextInt();

对于(int i=1;i NPE从哪一行提交?您如何调用
romanToInt
方法?NPE从哪一行提交?您如何调用
romanToInt
方法?是的,我也是。在同一行代码上有两个严重错误是不寻常的。但是,如果试图查找
char 在键为
String
的映射中?不!
map.get()
Object
作为参数,而不是
K
。不幸的是,此API决策会导致与此处类似的运行时错误,但它也允许您调用
.get()
在Java 2中创建的
MapMap在泛型之前,所以签名最初是
Object get(Object key)
。一旦协变函数返回,它就被更改为
V get(Object key)