小编mar*_*nes的帖子

Java错误:"比较方法违反了其总合同!"

我有这个代码:

package org.optimization.geneticAlgorithm;
import org.optimization.geneticAlgorithm.selection.Pair;

public abstract class Chromosome implements Comparable<Chromosome> {
    public abstract double fitness();
    public abstract Pair<Chromosome> crossover(Chromosome parent);
    public abstract void mutation();
    public int compareTo(Chromosome o) {
        int rv = 0;
        if (this.fitness() > o.fitness()) {
            rv = -1;
        } else if (this.fitness() < o.fitness()) {
            rv = 1;
        }
        return rv;
    }
}
Run Code Online (Sandbox Code Playgroud)

每次我运行此代码时,我都会收到此错误:

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:376)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:182)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at …
Run Code Online (Sandbox Code Playgroud)

java openjdk comparable

11
推荐指数
1
解决办法
1万
查看次数

Gnuplot xticlabels有几行

如果我添加一个xticlabel使用3行gnuplot切割在第二行的中间.有没有方法可以让xticlabels有几行?

这是我的数据文件:

"[17h30,19h00] 25" 1
"[03h30,10h00] 21" 1
"[03h00,12h00] 26" 2
"[18h00,19h30] 27" 3
"[20h30,22h00] 25" 4
"[13h00,14h30] 25" 4
"[19h30,21h30] 25" 5
"[14h30,16h00] 25" 5
"[16h30,18h00] 25" 5
"[09h30,15h00] 25" 9
Run Code Online (Sandbox Code Playgroud)

这是我的gnuplot代码:

set terminal postscript eps color
set output '| epstopdf --filter --outfile=hist.pdf'
set auto x
set yrange [0:10]
set style histogram clustered
set boxwidth 0.95 relative
set style fill transparent solid 0.5 noborder
plot 'hist.dat' using 2:xticlabels(1) with boxes lc rgb'blue90' notitle
Run Code Online (Sandbox Code Playgroud)

最后这是生成的图表:

在此输入图像描述

plot gnuplot

7
推荐指数
1
解决办法
9668
查看次数

并发问题与Boost属性树有关

我开发了一个简单的包装器,它使用Boost属性树封装了一个JSONObject.问题是此代码中的分段错误:

void JSONObject::parse(const std::string &text)
{
    std::istringstream ss(text);
    boost::property_tree::read_json(ss, *pt);
}
Run Code Online (Sandbox Code Playgroud)

一点上下文,我使用JSON进行消息序列化.如果程序只使用一个线程,它可以正常工作.但是如果程序使用两个线程在上面的代码的最后一行中给出了一个分段错误.

每个线程都有自己的JSONObject对象,并且线程之间不共享任何变量.我的想法是,流内部可能不是线程安全的.

谁能帮我?

c++ multithreading boost istream boost-propertytree

6
推荐指数
1
解决办法
1992
查看次数

C++继承:模板与指针

我试图了解继承方案中指针和模板之间的最佳解决方案.

考虑以下类.

class Event
{
};

class Filter
{
    public:
        virtual void process(Event *event) = 0;
};

class Pipeline
{
    private:
        std::vector<Filter*> _filters
};
Run Code Online (Sandbox Code Playgroud)

每个用户都可以展开Event类和Filter类来保存实际数据和实际过滤功能.管道类仅将过滤器与队列连接在一起并执行方法过程.

直到现在我总是使用指针来处理继承,例如一个过滤器指针的std :: vector和一个接收Event指针的进程函数.而不是指针可以使用模板吗?

例如

class Event
{
};

template<class Event> class Filter
{
    public:
        virtual void process(Event *event) = 0;
};

template<class Filer> class Pipeline
{
    private:
        std::vector<Filter> _filters
};
Run Code Online (Sandbox Code Playgroud)

这是否有效,甚至是可能的,主要含义是什么?

我有另一个例子来讨论.请考虑以下代码:

template<class Element, class Cluster>
Cluster* closestCluster(Element *e, std::vector<Cluster*> &clusters)
{
    double minDist = clusters[0]->distance(e);
    Cluster *c = clusters[0];
    for(std::size_t i = 1 ; …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates pointers

5
推荐指数
1
解决办法
269
查看次数

Boost属性write_json行为不正确

我正在为Boost属性树编写JSON包装器.目前,重点是将生成的JSON写入字符串或文件.

使用boost :: property_tree :: json_parser :: write_json(ss,*pt)生成的属性树以字符串形式写入.

但是这种方法不理解什么是true,false,null或数字.一切都转换为字符串.

阅读Boost文档,这是库的限制.有没有办法修改这种行为?

c++ json boost boost-propertytree

4
推荐指数
1
解决办法
2158
查看次数

Eclipse 4.4 Luna丑陋的主题与XFCE 4.11

最新的日食在XFCE 4.11中与Adwaita主题有一个奇怪的方面.以下图像显示了主要问题

工具尖端的背景是白色,而不是Adwaita蓝色. 与白色backgroud的蚀头工具技巧

打开子菜单的侧箭头显得很丑陋. 丑陋的侧箭

除此之外,条形中的填充物使得在我的笔记本电脑中使用非常困难. 在此输入图像描述

有没有人有任何建议?

css eclipse themes xfce gtk3

4
推荐指数
2
解决办法
4220
查看次数

Java 8 可重入锁和条件导致 IllegalMonitorStateException:当前线程不是所有者

我已经在这里搜索过这个错误,但我认为我的代码看起来是正确的:

  1. 我在尝试之外获得了锁..终于
  2. 我在最后部分有一个解锁
  3. 我只是试图等待锁内的情况。
  4. 我什至打印当前锁是否由该线程持有并且返回 true。

这是代码的摘录,如果我尝试运行代码,我会得到 java.lang.IllegalMonitorStateException:当前线程不是所有者。错误出在 cond.wait() 方法中。

public void takeARest() {
    lock.lock();
    try {
        while (disembark < totalPassengers) {
            System.err.printf("Held by %s%n",lock.isHeldByCurrentThread());
            cond.wait();
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java locking reentrantlock

4
推荐指数
1
解决办法
1351
查看次数