我正在使用JFreeChart并希望显示球员得分的条形图,其中y轴上的得分和x轴上的球员比赛分组.
例如
String[] {Player name, score, game number}
Player 1, 10 , 1
Player 1, 12 , 2
Player 1, 15 , 3
Player 2, 11 , 1
Player 3, 18 , 1
Run Code Online (Sandbox Code Playgroud)
因为玩家不必玩相同数量的游戏,所以当创建数据集时会导致大量空白,因为它试图为玩家2和3游戏2和3绘制一个条形图.
data.addValue(score, game number, player name);
Run Code Online (Sandbox Code Playgroud)
输出:(数字不匹配,这只是我敲了一个快速测试)

任何人都可以帮我解决这个空白区域的问题吗?从理论上讲,玩家1可以继续玩2场比赛,玩家2和3只玩少数游戏,所以看起来很荒谬!我是JFreeChart的新手,所以可能有一个明显的解决方案!
预先感谢您的帮助.
我有一个包含各种子类型的对象列表:
List<Dog> dogList = new ArrayList<>();
dogList.add(new Poodle())
dogList.add(new Dalmation());
Run Code Online (Sandbox Code Playgroud)
我想搜索此列表并返回指定类的所有实例:
public <T extends Dog> List<T> getAll(Class<T> dogType){
List<T> returnObjects = new ArrayList<>();
for(T obj : dogList){
if(dogType.instanceOf(obj){
returnObjects.add(dogType.cast(obj));
}
}
return returnObjects;
}
Run Code Online (Sandbox Code Playgroud)
用法:
List<Poodle> poodleList = getAll(Poodle.class);
Run Code Online (Sandbox Code Playgroud)
这是我对仿制药的第一次正确尝试,事情感觉他们有点失控.这是一种体面的做事方式,还是我错过了一个更简单/明显的解决方案?
编辑:更新为使用instanceOf()和cast()以避免未经检查的强制转换
我正在编写一些代码来生成程序映射.有些步骤比其他步骤花费的时间长得多,我正在计算构建的每个部分以查看瓶颈的位置,并让用户知道程序没有停滞在它们上面.
目前我有很多看起来像这样的代码:
Console.Write("Creating tiles");
var watch = System.Diagnostics.Stopwatch.StartNew();
CreateTiles(); //key mapgen function
watch.Stop();
Console.WriteLine("... finished in: {0} s", watch.ElapsedMilliseconds/1000d);
Console.Write("Calculating tile elevations");
var watch = System.Diagnostics.Stopwatch.StartNew();
CalculateTileElevations(); //key mapgen function
watch.Stop();
Console.WriteLine("... finished in: {0} s", watch.ElapsedMilliseconds/1000d);
//etc
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法重构这个看起来像下面这样的东西:
ExecuteTimedFunction(CreateTiles(), "Creating tiles");
ExecuteTimedFunction(CalculateTileElevations(), "Calculating tile elevations");
void ExecuteTimedFunction(Func genericFunction, String logMsg)
{
Console.Write(logMsg);
var watch = System.Diagnostics.Stopwatch.StartNew();
genericFunction();
watch.Stop();
Console.WriteLine("... finished in: {0} s", watch.ElapsedMilliseconds/1000d);
}
Run Code Online (Sandbox Code Playgroud)
警告:所有函数的返回类型都是void因为它们都操作了一个主列表的tile,但并非所有函数都具有相同数量的输入参数(尽管大多数都有0个参数,因此该案例的解决方案仍然是有用)