0

私は最終学年プロジェクトのプログラムで忙しいです。次のメソッドは、組み合わせのリストを返す必要があり、組み合わせは LoadCases のリストです (variableLoad と permanentLoad は LoadCase のサブクラスです)。

public ArrayList<ArrayList<LoadCase>> strUfCombinations()
{
    ArrayList<ArrayList<LoadCase>> combinationslist = new ArrayList<ArrayList<LoadCase>>();
    int i = 0;

    for(int x = 0; x < allvariableLoads.size(); x++)
    {
        combinationslist.add(new ArrayList<LoadCase>());
    }

    ListIterator<ArrayList<LoadCase>> cListItr = combinationslist.listIterator();

    while(cListItr.hasNext())
    {           
        cListItr.next();
        ArrayList<LoadCase> combination = new ArrayList<LoadCase>();

        for(int j = 0; j < allvariableLoads.size(); j++)
        {
            allvariableLoads.get(j).setIsLeading(false);
        }
        allvariableLoads.get(i).setIsLeading(true);

        Iterator<VariableLoad> vLoadIterator = allvariableLoads.iterator();
        while(vLoadIterator.hasNext())
        {
            VariableLoad vload = vLoadIterator.next();
            if(vload.getIsLeading()==true)
            {
                vload.finalfactor = vload.partialFactor.strUf;
            }
            if(vload.getIsLeading()== false)
            {
                vload.finalfactor = vload.combinationFactor * vload.partialFactor.strUf;
            }
            combination.add(vload);
        }

        Iterator<PermanentLoad> pLoadIterator = permanentLoads.iterator();
        while(pLoadIterator.hasNext())
        {
            PermanentLoad pload = pLoadIterator.next();
            pload.finalfactor = pload.partialFactor.strUf;
            combination.add(pload);
        }

        Iterator<LoadCase> combItr = combination.iterator();
        while(combItr.hasNext())
        {
            LoadCase test = combItr.next();
            System.out.print(test.finalfactor+test.name+"  ");
        }
        System.out.println();
        cListItr.set(combination);
        i++;
    }
    System.out.println("\n");

    return combinationslist;
}

テストクラスを使用して実行しています:

public static void main(String[] args) 
{
    PermanentLoad testload = new PermanentLoad("DL1", "self");
    PermanentLoad testload2 = new PermanentLoad("DL2", "geofac");
    PermanentLoad testload3 = new PermanentLoad("DL3", "fluid");
    PermanentLoad testload4 = new PermanentLoad("DL4", "geounf");

    VariableLoad vload1 = new VariableLoad("VL1", "imposed", "A");
    VariableLoad vload2 = new VariableLoad("VL2", "wind", "normal");
    VariableLoad vload3 = new VariableLoad("VL3", "imposed", "E2");
    VariableLoad vload4 = new VariableLoad("VL4", "thermal", "normal");

    CasesManager manager = new CasesManager();
    manager.addCase("DL1", "self", "null");
    manager.addCase("DL2", "geofac", "null");
    manager.addCase("DL3", "fluid", "null");
    manager.addCase("DL4", "geounf", "null");
    manager.addCase("VL1", "imposed", "A");
    manager.addCase("VL2", "wind", "normal");
    manager.addCase("VL3", "imposed", "E2");
    manager.addCase("VL4", "thermal", "normal");
    manager.addCase("VL5", "cranes", "normal");

    System.out.println("\n");

    CombinationCalculator calc = new CombinationCalculator(manager);
    ArrayList<ArrayList<LoadCase>> combinations =  calc.strUfCombinations();

    Iterator<ArrayList<LoadCase>> cListItr = combinations.iterator();
    while(cListItr.hasNext())
    {
        Iterator<LoadCase> combItr = cListItr.next().iterator();
        while(combItr.hasNext())
        {
            LoadCase test = combItr.next();
            System.out.print(test.finalfactor+test.name+"  ");
        }
        System.out.println();
    }

テストクラスを実行したときの出力は次のとおりです。

1.6VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  1.6VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  1.6VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  0.48VL4  1.3VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  


0.48VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4  
0.48VL1  0.96VL3  0.48VL4  0.0VL2  1.6VL5  1.2DL1  0.0DL2  1.2DL3  1.2DL4 

行列は strUfCombinations() 内から出力され、2 番目の行列は最終的な組み合わせリストを反復処理することによってテスト クラスから出力されます。最初の行列は正しい出力です。strUfCombinations() メソッドは、最後の組み合わせが追加された組み合わせリストにデータを入力しているように思えます。

誰でも助けることができますか?多分私は単純なものを見逃しているだけです。

よろしく、ジャック

4

1 に答える 1

0

問題は、LoadCases私が使用した がリサイクルされていたことです。つまり、arraylist のすべての要素が単一の要素を指してLoadCaseいたため、すべての要素が最終的な配列の値を持っていました。

LoadCaseのコピーを作成するstatic clone()メソッドをクラスLoadCaseに記述することで、この問題を解決しました。次に、とからの元の LoadCase の代わりに、クローンが作成され、組み合わせに入れられます。allvariableloadspermanentloads

于 2012-08-27T13:37:57.323 に答える