このクラスはJavaクラス用に割り当てられています。私のコードは、peek()が間違った値を返すループの最後の反復を除いて、正常に動作しています。他のすべての反復は正しい値を与えるので、なぜそれが間違った値を与えるのか分かりません。Peek()の1回の呼び出しで間違った値を与えるオブジェクトの優先度キュー
私の割り当ては、ボックスの優先度キューを作ることです。我々は、テキストファイルからフロート値を読み取り、ボックスに値を入力します。ボックスの合計が1.0を超えることはできません。
テキストファイルからのデータがある:0.1、0.6、0.11、0.765、0.01、0.42、0.1492,0.667、0.333、0.111 コード: ボックスクラス:
public class box implements Comparable<box>
{
//instance variables
private ArrayList<Float> values;
private Float totalValue=0.0f;
public box()
{
values = new ArrayList<Float>();
}
public box(Float val)
{
values = new ArrayList<Float>();
values.add(val);
}
//add new values to the box
public void addVal(Float newVal)
{
values.add(newVal);
}
/*
* Adds up all the values in the box, returns sum as Float.
*/
public Float findSum()
{
totalValue=0.0f;
for(Float val : values)
{
totalValue=totalValue+val;
}
return totalValue;
}
}
コンパイラのコード import java.util.Comparator; PackingBoxes(メインが含まれている)ため
public class boxComparator implements Comparator<box>
{
//compare method for boxes
public int compare(box a, box b)
{
if (a.findSum()>b.findSum())
return 10;
else if (a.findSum()<b.findSum())
return -10;
else
return 0;
}
}
コード: 輸入java.utilの。 ; import java.io.;多くのデバッグ後
public class PackBoxes
{
public static void main(String[] args)
{
...
boxComparator compSum = new boxComparator();
...
*Strategy A: As each new item is processed, it is placed in the
* fullest box that can hold it.
*/
System.out.println("=========");
System.out.println("Packing via most-filled strategy:");
System.out.println();
//Create new priorityqueue of boxes for strategy A
PriorityQueue<box> boxesA = new PriorityQueue<box>(11,compSum);
//add first box to queue
boxesA.add(new box());
//for each loop, goes through arrayList L
for(Float x : L)
{
//if element + sum of current box is less than 1 put element
//into the current box
if(x + boxesA.peek().findSum() <1)
{
boxesA.peek().addVal(x);
}
//if element + sum of current box is greater than 1, then make
// a new box
else
{
boxesA.add(new box(x));
}
}
System.out.println(boxesA.size()+" boxes were used.");
//print queue
while(!boxesA.isEmpty())
{
System.out.println(boxesA.poll().findSum());
}
}
、私はプログラムは、次のないことを発見しました:ボックス2を作成し、 読む0.1、0.6、読む0.765箱1に入れ0.11は、ボックス1でフィットdoes't。ボックス2に入れられた.01を読んでください(これは合計が最小です)。 0.42を読んで、ボックス2に収まらない、ボックス3を作成する。ボックスに.1492を入れる。3.667を読んでボックスを作る。4.ボックス3に入れた.333を読む(ボックス3は現在の合計が最小である)。 .111を読み、ボックス3に収まらない、ボックス5を作成する 太字部分が問題です。それは0.111を読んで、.667でボックス4に入れてください。しかし、私が覗き見をすると0.42、0.1492、0.33のボックスが表示され、合計は.9022となります。 0.667が0.9022より小さいので、なぜpeek()が私にボックス4を与えていないのか理解できません。ここの助けがあれば幸いです。
編集:問題の一部ではないコードを削除しようとしました。
[最小テストケース](http://stackoverflow.com/help/mcve)を作成してください。 –