Java hashmap - put无法正常工作?

时间:2012-01-17 13:15:44

标签: java hashmap

我正在使用hashmap,但它无法正常工作。我有一个Computing.java类,我有添加到hashmap的方法:

addIntoMap(String key, String value){

   m_parameters_values.put(key, value);
   }

和从hashmap获取的方法:

public void getValueByKey(String key){
        System.out.println("GET "+m_parameters_values.get(key));
    }

我从Main类调用theese方法,但是我无法获取键,我仍然无效。你知道为什么吗?

类计算的内容(构造函数省略):

public void Parse (String args[]) throws Exception{
        Parse(args,true);
    }

    public void Parse(String[] args, boolean throwErrorIfParamenterNotDefined) throws CmdLineException
    {


        int i = 0;

        while (i < args.length)
        {
            // The current string is a parameter name
            String key = args[i].substring(1, args[i].length() - 1).toLowerCase();
            String value = "";
            i++;
            if (i < args.length)
            {
                if (args[i].length() > 0 && args[i] == "-")
                {
                    // The next string is a new parameter, do not nothing
                } else
                {
                    // The next string is a value, read the value and move forward
                    value = args[i];
                    i++;
                }
            }

            if (!m_parameters.containsKey(key))
            {
                if (throwErrorIfParamenterNotDefined)
                {

                    //throw new CmdLineException("Parameter is not allowed.");

                }
                //continue;
            }
            System.out.println("Key: "+key+" value: "+value);
            m_parameters_values.put(key, value);
            //System.out.println("GET "+m_parameters_values.get("provider"));
            }

        // Check that required parameters are present in the command line. 

        for (String key : m_parameters.keySet())
        {
            if (m_parameters.get(key).required() && !m_parameters.get(key).exists())
                throw new CmdLineException("Required parameter is not found.");
        }


    }

    public void getValueByKey(String key){
        System.out.println("GET "+m_parameters_values.get(key));
    }

主要课程内容:

public static void main(String[] args) {

    Computing comp = new Computing("Computing");    

        cmdLine.Parse(args);
        cmdLine.getValueByKey("convert");

3 个答案:

答案 0 :(得分:7)

value方法中使用的打印put

度Acc。到javadoc:

  

返回值null不一定表示映射不包含键的映射;地图也可能明确地将键映射为null。

确保使用containsKey方法验证key是否确实存在。

getValueByKey中使用以下代码;并查看它是否打印任何内容:

if (m_parameters.containsKey(key))
{
    System.out.println("GET "+m_parameters_values.get(key));
}

答案 1 :(得分:2)

我怀疑你没有尝试在调试器中调试它,因为你拥有的许多行都是可疑的。


String key = args[i].substring(1, args[i].length() - 1).toLowerCase();

这会给你带有第一个或最后一个字符的小写字母。虽然您可能希望删除第一个,如果您认为它以-开头,但您不清楚它是否正在删除最后一个。


args[i] == "-"

这永远不会是真的,因为它们不是同一个对象。也许"-".equals(args[i])就是你想要的。


for (String key : m_parameters.keySet())
{
    if (m_parameters.get(key).required() && !m_parameters.get(key).exists())

可以简化为

for (ParameterValue pv : m_parameters.values()) {
    if (pv.required() && !pv.exists())

我想知道exists()是否应与m_parameters_values

中是否已设置有关

答案 2 :(得分:1)

如果没有看到更多代码就不可能说,但如果我不得不猜测,我猜你有Computing类的多个实例,并且你在尝试时向一个实例添加键从另一个实例中提取它们。