Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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
将Python转换为Java并面临一些问题_Java_Python_Hashmap - Fatal编程技术网

将Python转换为Java并面临一些问题

将Python转换为Java并面临一些问题,java,python,hashmap,Java,Python,Hashmap,我将以下Python代码转换为Java代码,如下所示: import random howMany = random.randint(0,1000) stats = {} for i in range(howMany): value = random.randint(0,500) stats.setdefault(value,0) stats[value]+=1 for item in stats: if stats[item] > 1: print item 以下是我迄今为止编

我将以下Python代码转换为Java代码,如下所示:

import random
howMany = random.randint(0,1000)
stats = {}
for i in range(howMany):
value = random.randint(0,500)
stats.setdefault(value,0)
stats[value]+=1
for item in stats:
if stats[item] > 1:
    print item
以下是我迄今为止编写的Java代码:

import java.util.Random;
import java.util.*;

public class PythonToJava 
{
    public static void main(String[] args) 
    {
        Random rm = new Random();
        int i = rm.nextInt(1000);
        HashMap<Integer,Integer> stats = new HashMap<Integer,Integer>();
        System.out.println("Random Number Generated is: " + i);
        for (int j = 0; j<i; j++)
        {
            int value = rm.nextInt(500);
            System.out.println("The value of VALUE is " + value);
            DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>();
            defaultvalue.put(value,0);
        }
    }
}

public class DefaultingMap<Integer, Integer> implements Map<Integer, Integer>
{
    private final Map<Integer, Integer> map;
    private final Integer defaultValue;
    public DefaultingMap(Map<Integer, Integer> map, Integer defaultValue)
    {
        this.map = map;
        this.defaultValue = defaultValue;
    }

    @Override public Integer get(Object key)
    {
        Integer ret = map.get(key);
        if (ret == null)
        {
            ret = defaultValue;
        }
        return ret;
    }

    @Override public int size()
    {
        return map.size();
    }
    // etc
}
import java.util.Random;
导入java.util.*;
公共类PythonToJava
{
公共静态void main(字符串[]args)
{
随机rm=新随机();
int i=下一次调整令吉(1000);
HashMap stats=newhashmap();
System.out.println(“生成的随机数为:“+i”);

对于(int j=0;j我看到的是您在
DefaultingMap
中有参数化构造函数,并且缺少默认构造函数。请添加默认构造函数

public DefaultingMap()
{
  // do your things
}
否则,请更改此呼叫

DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>();
defaultvalue.put(value,0);
请参阅要重写的方法

建议 如果您不希望超越MAP中的所有方法(因为这确实是一件痛苦的事情),那么您可以使用
扩展HashMap
,而不是
实现MAP
。这样您只需要超越您想要的方法。就像您的情况一样,get和size

我修改了

DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>();

这对我很有用。

错误是怎么说的?DefaultingMap似乎不是标准JDK的一部分。您可能需要添加其他库或使用另一个类。DefaultingMap与PythonToJava在同一文件中吗?您不能在同一文件中定义两个公共类。请参阅@asif中的ans。还请注意Python的
randint(01000)
等同于Java
nextInt(1001)
,与500相同。Java的范围是独占的,Pythons是包含的。提及
public DefaultingMap(){//do your things}
确实有效,但第二个错误仍然存在,即“此行有多个标记。您能告诉我们其他错误是什么吗?首先,将
分为不同的文件(因为每个文件只允许一个公共类)很明显,您需要覆盖
MAP
中的所有方法。您刚刚覆盖了少数方法。请覆盖所有方法。然后这将解决您的问题。您不确定我需要再次覆盖哪些方法。请在这里提及它。谢谢您的回答,我宁愿在这里扩展
HashMap
,然后再进行扩展t也没有改变。原因可能是什么?以下是我所改变的:
class DefaultingMap Extendes HashMap
Hi@BevynQ,谢谢你的回答。你能更新扩展类HashMap的代码吗?我更喜欢扩展类,而不是覆盖接口的所有方法。
DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>(value,0);
remove
put
keySet
values
containsKey
containsValue
entrySet
putAll
isEmpty
DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>();
DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>(new HashMap<Integer, Integer>(),0);
public class DefaultingMap<Integer, Integer> implements Map<Integer, Integer>
{
    private final Map<Integer, Integer> map;
    private final Integer defaultValue;

    public DefaultingMap(Map<Integer, Integer> map, Integer defaultValue)
    {
        this.map = map;
        this.defaultValue = defaultValue;
    }

    @Override public Integer get(Object key)
    {
        Integer ret = map.get(key);
        if (ret == null)
        {
            ret = defaultValue;
        }
        return ret;
    }
class DefaultingMap<K, V> implements Map<K,V>{ //remove public and use proper generic parameters

   private final Map<K, V> map; // is now generic
   private final V defaultValue; // must be of type V

   public DefaultingMap(Map<K, V> map, V defaultValue) throws IllegalArgumentException
   {
   /* because we have defined this constructor DefaultingMap() will need to be 
      defined if we need/want it. */
       if (map == null){
           throw new IllegalArgumentException("provided map cannot be null");
       }
       this.map = map;
       this.defaultValue = defaultValue;
   }

   public V get(Object key){

       V ret = map.get(key);
       if (ret == null){
           ret = defaultValue;
       }
       return ret;
   }
   @Override
   public V put(K key, V value) {
       return map.put(key,value); // delegate to map
   }