我正在使用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");
答案 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
类的多个实例,并且你在尝试时向一个实例添加键从另一个实例中提取它们。