1

3 つの ArrayLists があり、2 つが文字列で、最後の 1 つが整数です。

最初の ArrayList には、コーラのフレーバー バリアントのような特定の製品の特定のバリアント (variantArray) が含まれ、2 番目のアレイ リストには、製品のサイズ (80oz、500mL、1L) などの単位を含むユニット (unitArray) が含まれます。最後の 1 つは数量 *(quantityArray) です。

これは私が使用するクラスです。

public class CurrentOrderClass {

  //ArrayLists
  private ArrayList<String> variantArray = new ArrayList<String>();
  private ArrayList<String> unitArray = new ArrayList<String>();
  private ArrayList<Integer> quantityArray = new ArrayList<Integer>();


  //TODO ArrayList functions
  public ArrayList<String> getUnitArray() {
      return unitArray;
  }

  public void setUnitArray(ArrayList<String> unitArray) {
      this.unitArray = unitArray;
  }

  public void addToUnitArray(String unit){
      this.unitArray.add(unit);
  }



  public ArrayList<Integer> getQuantityArray() {
      return quantityArray;
  }

  public void setQuantityArray(ArrayList<Integer> quantityArray) {
      this.quantityArray = quantityArray;
  }

  public void addToQuantityArray(int quantity){
      this.quantityArray.add(quantity);
  }

  public ArrayList<String> getVariantArray() {
      return variantArray;
  }

  public void setVariantArray(ArrayList<String> variantArray) {
      this.variantArray = variantArray;
  }

  public void addToVariantArray(String variantArray){
      this.variantArray.add(variantArray);
  }


  @Override
      public String toString() {
         return "[ product=" + productName + ", variants=" + 
            variants + " , unit=" + unit + " , quantity=" + quantity + "]";
      }

}

ユーザーが Variant、Unit、および Quantity を選択できるように、ユーザー入力を取り込みます。入力は、それぞれの ArrayList に格納されます。

ただし、ユーザーが ArrayLists に既に存在する Variant と Unit を入力すると、ArrayLists の更新に問題が発生しますが、Quantity は異なります。私がやりたいことは、新しいエントリを追加するのではなく、現在の ArrayLists を更新して、ユーザーがバリアントとユニットを入力しても数量が異なる場合に、数量のみを更新するようにすることです。

私が最初に試したのは、 を使用して ArrayList に入力が既に存在するindexOf(userInputVariant)かどうかを確認し、それが a と一致するかどうかを確認することindexOf(userInputUnit)でした。これは、ユーザー入力が既に繰り返されていることを意味します。ただし、 indexOf がそのロジックで実行されるとは思わず、返される値は、userInputVariant文字列の最初のインスタンスが見つかった値です。

私が試みた 2 番目の試みは、for each ループを使用することでしたが、必要なインデックスを適切に返すのに再び苦労しました。

「ブドウ」を使用して、その variantArray の最初の 10 個の要素にCurrentOrderClass名前を付けて事前入力したオブジェクトをインスタンス化します。currentOrder

その後、次の if-else ステートメントを試しました。

if( (currentOrder.getVariantArray().indexOf(product.getVariant()[variantPosition]) ==
     currentOrder.getUnitArray().indexOf(product.getUnit()[position]) 

ただし、上記のように、 indexOf は、検索するように指示した String を最初に見つけた場所で int を返します。その特定の位置の後に存在するかどうかを確認するとは思いません。

私が試した 2 番目のコードは、for-each を使用してそこから位置を返すことでしたが、これも位置 = 0 しか返されませんでした。

for( String Grape : currentOrder.getVariantArray() ){
      Log.d("Angelo", "Retrived Element: " + Grape 
           + " at position = " + currentOrder.getVariantArray().indexOf(Grape));
}

現在、for-each ループ内で for-each ループを実行することを考えていますが、必要な適切な位置を返す方法がわかりません。

誰かがそれを適切に機能させる方法について考えを持っていますか? unitArray と「相互参照」することで、variantArray に複数回出現するアイテムの位置を返す必要があります。ありがとう。

4

2 に答える 2

3

この場合、1 つの for ループで十分です。

これは次のようなものになります:

isExist = false;
for(index = 0; index<variantArray.size(); index++){
    if(variantArray.get(index) == userChoiceVariant &&
        unitArray.get(index) == userChoiceUnit){
        //update quantity
        isExist = true;
    }
}
if(!isExist){
    //insert order
}
于 2013-08-01T03:52:24.537 に答える