Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 为什么main()显示得很好;“卢卡库”;并且包含_names()返回null?_Java_Nullpointerexception_Hashmap - Fatal编程技术网

Java 为什么main()显示得很好;“卢卡库”;并且包含_names()返回null?

Java 为什么main()显示得很好;“卢卡库”;并且包含_names()返回null?,java,nullpointerexception,hashmap,Java,Nullpointerexception,Hashmap,我已经创建了一个通常可以在方法“main()”和“contains_names()”中使用的hashmap,我在main的方法的hashmap中添加了一些元素,但是如果我尝试在“contains_names”中显示它们,它会返回“null”,我不明白为什么 例如: 如果我尝试在“main”中执行System.out.println(names.get(“Lukaku”)),它将返回0 如果我对“contains_names()”执行相同的操作,它将返回null import java.util.

我已经创建了一个通常可以在方法“main()”和“contains_names()”中使用的hashmap,我在main的方法的hashmap中添加了一些元素,但是如果我尝试在“contains_names”中显示它们,它会返回“null”,我不明白为什么

例如: 如果我尝试在“main”中执行System.out.println(names.get(“Lukaku”)),它将返回0

如果我对“contains_names()”执行相同的操作,它将返回null

import java.util.HashMap;
import java.util.ArrayList;

public class devideV2 {

    static int no_element=8;

    public static HashMap<String,Integer> names =  newHashMap<String,Integer>();


    /**
     *
     * @param arrays is an arraylist of String which contains some names (ArrayList)
     * @return the names who figure out more than an half or "null" if there's not (String)
     */
    public static String contains_names(ArrayList<String> arrays){

        //will return null but why ?
        System.out.println(names.get("lukaku"));

        //increment the value of the key that is represented by the first element of arrays
        names.put(arrays.get(0),names.get(arrays.get(0)+1));

        //will return True
        System.out.println(names.containsKey("Lukaku"));

        //At line 20 I've a null pointer Exception who has been thrown

        //if the name figure out more than an half then return this name
        if(names.get(arrays.get(0)) > (no_element/2)){
            return arrays.get(0);
        }


        //remove the name
        arrays.remove(0);

        //making recursion
        if(arrays.size()>0) {
            return contains_names(arrays);
        }

        //if no names figure out more than an half then return "null"
        return "null";
    }

    public static void main(String[] args){

        String[] names_array={"Lukaku", "Lukaku", "Lukaku", "Hazard","Hazard","Hazard","Hazard","Hazard"};
        ArrayList<String> Names_arrayList= new ArrayList<String>();

        //put every names in the Hashmap and their occurences to 0
        for(int i=0;i<names_array.length;i++){
            Names_arrayList.add(names_array[i]);
            names.put(names_array[i],0);
        }

        //will return 0
        System.out.println(names.get("Lukaku"));

        System.out.println(contains_names(Names_arrayList));
    }

}

import java.util.HashMap;
导入java.util.ArrayList;
公共类设备v2{
静态int no_元素=8;
公共静态HashMap name=newHashMap();
/**
*
*@param arrays是包含一些名称的字符串的arraylist(arraylist)
*@返回计算出一半以上的名称,如果没有,则返回“null”(字符串)
*/
公共静态字符串包含_名称(ArrayList数组){
//将返回null,但为什么?
System.out.println(names.get(“卢卡库”);
//递增由数组的第一个元素表示的键的值
names.put(arrays.get(0),names.get(arrays.get(0)+1));
//将返回真值
System.out.println(name.containsKey(“卢卡库”);
//在第20行,我抛出了一个空指针异常
//如果名称计算结果超过一半,则返回此名称
if(names.get(arrays.get(0))>(no_元素/2)){
返回数组。get(0);
}
//删除该名称
数组。删除(0);
//进行递归
if(arrays.size()>0){
返回包含_名称(数组);
}
//如果没有名字的值超过一半,则返回“null”
返回“null”;
}
公共静态void main(字符串[]args){
String[]names_array={“卢卡库”、“卢卡库”、“卢卡库”、“危险”、“危险”、“危险”、“危险”、“危险”、“危险”};
ArrayList name_ArrayList=新建ArrayList();
//将Hashmap中的每个名称及其出现次数设置为0

对于(int i=0;i,括号中有一个输入错误:

    names.put(arrays.get(0),names.get(arrays.get(0)+1));
这是用“卢卡库1”的计数覆盖“卢卡库”,该计数不存在,因此返回null

您需要的是(具有适当的格式):


为什么要在contains_names方法中修改names HashMap?names.put(arrays.get(0)、names.get(arrays.get(0)+1))的确切用途是什么;
?我不希望该方法对映射进行任何修改。如果我完全诚实的话,我甚至无法真正理解该方法应该做什么,以及为什么您认为递归方法是正确的选择,不是应该是
names.put(arrays.get(0),names.get(arrays.get(0))+1);
(括号移动)-因此它计算名称?该方法不应该被称为
countNames
?并且它可能返回
null
,因为没有名称总和超过8(但代码很容易被误解)作为一般的可读性说明,请避免使用诸如myarray和myarrayB之类的模糊名称-使用描述这些变量用途的描述性名称,这会使代码更易于其他人阅读和理解。此外,请查看Java编码标准,并将通用标准应用于代码、类的大小写和变量名等等,这些也使你的代码更容易阅读。我更新了我的代码(添加了一些注释等)很抱歉造成混淆。Hihihead有点累了,可以获得调试代码的提示。哦,谢谢,这是我的问题!:)
    names.put(arrays.get(0), names.get(arrays.get(0)) + 1);