Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/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中的映射-获取错误的映射大小_Java - Fatal编程技术网

java中的映射-获取错误的映射大小

java中的映射-获取错误的映射大小,java,Java,我试图理解Map接口在Java中是如何工作的。我试图做的是:遍历字符串数组,并为数组中的每个名称设置一个介于0到5之间的随机等级。然后将等级映射到名称[i]。然而,映射大小变得很奇怪,尽管我在数组中有10个元素,map.size()在映射之后是5。为什么程序会多次计算相同的大小(请参见输出)?下面是代码和输出: import java.util.*; class MapInterfaceExample{ public static void main(Stri

我试图理解Map接口在Java中是如何工作的。我试图做的是:遍历字符串数组,并为数组中的每个名称设置一个介于0到5之间的随机
等级。然后将
等级
映射到
名称[i]
。然而,映射大小变得很奇怪,尽管我在数组中有10个元素,
map.size()
在映射之后是5。为什么程序会多次计算相同的大小(请参见输出)?下面是代码和输出:

    import java.util.*;  

    class MapInterfaceExample{  

    public static void main(String[] args){  

    int grade = 0; 
    String[] name = {"Lisa", "Dan", "John", "Adam", "George", "Amanda", "Sarah", "James", "Derek", "Sam"}; 

    Map<Integer,String> map=new HashMap<Integer,String>();  

    for(int i=0; i<name.length; i++){
    grade = (int)(Math.random()*5+1); 
    map.put(grade, name[i]);  
    //System.out.println(grade + "\t"+ name[i]);  
    System.out.println("Size of map "+ map.size());}
    } 
    }
import java.util.*;
类MapInterfaceExample{
公共静态void main(字符串[]args){
int等级=0;
String[]name={“Lisa”、“Dan”、“John”、“Adam”、“George”、“Amanda”、“Sarah”、“James”、“Derek”、“Sam”};
Map Map=newhashmap();

对于(int i=0;i将新值指定给同一个键将覆盖旧值,因此,如果最多有5个不同的键(1-5),则贴图的最大大小为5


你应该使用名称作为键,因为它们是唯一的。然后几个学生可以有相同的分数。

你使用分数作为键

map.put(grade, name[i]);  

由于等级的范围是
[1,5]
,映射将不会大于5。

提示:映射不允许重复键。您确定等级是键吗?如果是,您想收集所有具有相同等级的名称吗?检查映射时会发生什么魔法。put(name[i],grade)@Kayaman,啊,谢谢,我知道现在发生了什么。大小是由我从
grade
@Pshemo中得到的值触发的,我如何得到0-5?谢谢。@Pshemo err是的,当然。@sumu00让我们从你现在拥有的开始:
(int)(Math.random()*5+1);
Math.random()
只能从范围
[0;1]生成值。
(或者让我们把它写成
[0;0.9999999…]
)。当我们把它乘以
5*[0;1)
时,它给了我们新的范围
[0;4.99999999…]
。添加
+1
后,范围变成
[1;5.99999999]
。通过强制转换到
(int)
我们删除
.999…
部分,所以范围就是
[1;5]
。如果你想得到
[0;5]
你可以在施法之前创建范围
[0;5.9999….]
要生成这样的范围,你需要
6*[0;0.99999…]
。所以可以使用
int value=(int)(6*Math.random())
@Pshemo生成这样的范围的值,这是一个很好的答案!非常感谢!谢谢,现在我明白了。