-1
int[] material = {6255,6255,5003};
int sumQuan = 0;
int []quantity = {6,5,1};
String []calc = {"1","1","0"};
int len = material.length;
int a = material[0];  

for(int i = 0; i < len; i++)
{
    if(a==material[i] && calc[i]=="1")
    {
        sumQuan = sumQuan+quantity[i];                                                       
    }                             
    else if(calc[i]=="0"){
        sumQuan = 0;
    }
    else
    {
        sumQuan = quantity[i];
    }
    System.out.println(sumQuan);
}

11,0 を返したいのですが、6,11,0 を返しています。

4

1 に答える 1

1

反復ごとに、ループの最初/最後に初期化sumQuanする必要があります。0また、配列がソートされていると仮定すると、アイテムが前のものと等しい限り、インデックスを増やし続け、合計をリセットしないでください。このような:

sumQuan = 0;
for(int i = 0; i < len; i++)
{
    if(calc[i].equals("1"))
    {
        sumQuan = sumQuan+quantity[i];                                                       
    }                             
    // we don't need to do anything if it's "0"
    if ((i < material.length-1 && material[i+1] != material[i])
         || (i == material.length-1)) {
        System.out.println(sumQuan);
        sumQuan = 0;
    }

}

このようにして、 に同じ値がある間、合計に追加し続けますmaterial

コードを少しだけ変更したい場合elseは、条件の分岐にprint ステートメントを残すことができ(a == material[i])ます。アイテムが最初のものと等しくない限り、出力されます。

于 2013-05-28T16:44:59.110 に答える