私はグラフデータベースを作成しました。 Vertex
と呼ばれるノードがあり、属性はattr1:<float-value>
,attr2:<float-value>
などです。また、Padre
という名前の属性と、それに続く属性attr1:<float-value>
,attr2:<float-value>
などのノードがあります。今、私は、 2つのノード(ノードのidと一致する2つのint)が与えられている場合、それらの間にパスが存在するかどうかを確認してください。そうであれば、パスの属性の合計を計算します。私はこのコードを試してみたNeo4j&Java - 属性のすべての値を合計する方法
:今
public void res(Session session, int x, int y) {
float z = 0F;
boolean found = false;
while (!found) {
if (x == y) {
StatementResult res = session.run("MATCH (N:Vertex) WHERE N.ID=" + x +" RETURN PROPERTIES(N)");
Record record = res.next();
for (String a: record.get("PROPERTIES(N)").keys()) {
if(a.equals("ID") || a.equals("IdAlbero")) {
continue;
}
Value k = record.get("PROPERTIES(N)").get(a);
z += k.asFloat();
}
found = true;
} else {
StatementResult res = session.run("MATCH (N:Vertex) WHERE N.ID=" + x +" RETURN PROPERTIES(N)");
Record record = res.next();
for (String a: record.get("PROPERTIES(N)").keys()) {
if(a.equals("ID") || a.equals("IdAlbero")) {
continue;
}
Value k = record.get("PROPERTIES(N)").get(a);
z += k.asFloat();
}
res = session.run("MATCH (N:Vertex),(M:Vertex), (N) - [R:Padre] ->(M) WHERE N.ID = " + x + " RETURN PROPERTIES(R)");
record = res.next();
for (String a: record.get("PROPERTIES(R)").keys()) {
if (a.equals("ID") || a.equals("IdAlbero")) {
continue;
}
Value k = record.get("PROPERTIES(R)").get(a);
z += k.asFloat();
}
}
}
System.out.println(z);
}
、私はz += k.asFloat()
ステートメントにエラーが発生しました。 これはエラーです:
Exception in thread "main" org.neo4j.driver.v1.exceptions.value.Uncoercible: Cannot coerce FLOAT to Java String at org.neo4j.driver.internal.value.ValueAdapter.asString(ValueAdapter.java:84) at Neo4j.res(Neo4j.java:160) at Connessione.connettiti(Connessione.java:27) at Connessione.main(Connessione.java:35).
私は何ができますか?
あなたは性質がフロートとして保存されますか?浮動小数点数に変換しようとしているプロパティの少なくとも1つが文字列として格納されているようです。 Eclipse/NetBeans/IntelliJデバッガを使用して、例外に対する実行を停止し、それがどの値であるかを確認することができます。あるいは、プロパティの名前( 'a')をprintlnするだけで、どのプロパティが例外を引き起こすかを知ることができます。 –