2016-12-19 18 views
1

文字列のリストと比較できる最初のNetlogo拡張を書きたいと思っています。私はエクステンションを書くのが初めてで、Javaのプログラミングについて多くのことを知らないので、私は助けを望んでいます。Netlogo Extension:文字列のリストの比較

私のコードは、これまでのところです。しかし

package org.nlogo.extensions.string; 

import org.nlogo.api.Argument; 
import org.nlogo.api.Context; 
import org.nlogo.api.DefaultReporter; 
import org.nlogo.api.ExtensionException; 
import org.nlogo.api.LogoException; 
import org.nlogo.api.Syntax; 
import org.nlogo.api.LogoListBuilder; 
import org.nlogo.api.LogoList; 


public class Matching2 extends DefaultReporter{ 

@Override 
public Syntax getSyntax(){ 
    return Syntax.reporterSyntax(new int[] { Syntax.ListType(), Syntax.ListType() }, 
           Syntax.ListType()); 
} 


@Override 
public Object report(Argument args[], Context context) 
     throws ExtensionException, LogoException 
    { 
     LogoList input1 = args[0].getList() ; 
     LogoList input2 = args[1].getList(); 
     return input1.retainAll(input2); 

    } 

}

、私はモデルを実行しようとすると、私はエラーを取得...

Thxを事前に。

編集:

error (UnsupportedOperationException) 
while observer running SHOW 
called by procedure CHECK-POTENTIAL-WORDS 
called by procedure GO 
called by Button 'go one time step' 

NetLogo is unable to supply you with more details about this error.Please report the problem at https://github.com/NetLogo/NetLogo/issues, or to [email protected], and paste the contents of this window into your report. 

java.lang.UnsupportedOperationException at org.nlogo.api.LogoList.org$nlogo$api$LogoList$$unsupported(LogoList.scala:67) 
at org.nlogo.api.LogoList$Iterator.remove(LogoList.scala:64) 
at org.nlogo.api.LogoList$Iterator.remove(LogoList.scala:54) 
at java.util.AbstractCollection.retainAll(AbstractCollection.java:410) 
at org.nlogo.extensions.string.Matching2.report(Matching2.java:28) 
at org.nlogo.prim._externreport.report(_externreport.java:50) 
at org.nlogo.prim.etc._show.perform(_show.scala:13) 
at org.nlogo.nvm.Context.stepConcurrent(Context.java:91) 
at org.nlogo.nvm.ConcurrentJob.step(ConcurrentJob.java:82) 
at  org.nlogo.job.JobThread.org$nlogo$job$JobThread$$runPrimaryJobs(JobThread.scala:143) 
at org.nlogo.job.JobThread$$anonfun$run$1.apply$mcV$sp(JobThread.scala:78) 
at org.nlogo.job.JobThread$$anonfun$run$1.apply(JobThread.scala:76) 
at org.nlogo.job.JobThread$$anonfun$run$1.apply(JobThread.scala:76) 
at scala.util.control.Exception$Catch.apply(Exception.scala:88) 
at org.nlogo.util.Exceptions$.handling(Exceptions.scala:41) 
at org.nlogo.job.JobThread.run(JobThread.scala:75) 
+1

WHATエラーが出るのですか? –

+0

残りのリストが空であることを示すエラーである可能性がありますか? –

答えて

0

ListインタフェースのLogoList実装はretainAll()メソッドをサポートしていない - つまり、AbstractCollectionでそのメソッドのデフォルト実装は、unsupportedあるイテレータのremove()方法を、使用しているため、 LogoList - ソースコードはこちらhttps://github.com/NetLogo/NetLogo/blob/c56cffd5b12cf135efc4c3640b3cc0d5dc2acc3c/parser-core/src/main/core/LogoList.scala

回避策:この操作をサポートする実装で独自のリストオブジェクトを作成します(例:ArrayList):

List input1 = new ArrayList(args[0].getList()); 
List input2 = new ArrayList(args[1].getList()); 

input1.retainAll(input2); 
return input1; 

しかし、あなたがLogoListを返すために必要とされる場合、これは動作しない場合があります - 代わりにこれを試してください:あなたは

return new LogoList(input1); 
+0

こんにちは、あなたの答えに感謝しますが、結果は、リストaの要素がリストb(false)かどうか(true)を示すtrue/falseのみです。 –

+0

@MatthiasMueller結果はArrayListまたはLogoListです。それとも、**真実であることを意味しますか?それはあなたの最初のコードにも含まれていません。その後、あなたの方法に対するあなたの期待を再指定してください。 –

+0

こんにちは、両方の入力にある文字列のリストを作成したいのですが、代わりにブール値(true/false)のみを取得します。 –