【发布时间】:2013-05-03 11:55:23
【问题描述】:
我正在将以下 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
}
但在以下行出现错误:
Java 代码:
DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>();
错误是:构造函数 DefaultingMap() 未定义
public class DefaultingMap<Integer, Integer> implements Map<Integer, Integer>
Error is : Multiple markers at this line
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.remove(Object)
- The type parameter Integer is hiding the type Integer
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.put(Integer, Integer)
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.keySet()
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.values()
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.containsKey(Object)
- The type parameter Integer is hiding the type Integer
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.containsValue(Object)
- Duplicate type parameter Integer
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.entrySet()
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.putAll(Map<? extends Integer,? extends Integer>)
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.isEmpty()
- The type DefaultingMap<Integer,Integer> must implement the inherited abstract method
Map<Integer,Integer>.clear()
谁能解释一下原因?
基本上,我正在尝试以某种方式设置默认值,就像 setdefault 在 python 中的工作方式一样。如果有人可以在这里帮助我,我将不胜感激。
【问题讨论】:
-
错误说明了什么?
-
DefaultingMap 似乎不是标准 JDK 的一部分。您可能需要添加额外的库或直接使用其他类。
-
DefaultingMap 是否与 PythonToJava 在同一个文件中?您不能在同一个文件中定义两个公共类。
-
查看@asif 的答案。
-
另请注意,Python 的
randint(0,1000)等同于JavanextInt(1001),与500 相同。Java 的范围是排他性的,Pythons 是包容性的。