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